2017-08-09 89 views
0

我的TypeScript代碼中有一個對象數組,我需要刪除重複的對象。 下面的代碼確實對我的工作:在TypeScript中從我的數組中獲取重複的對象

const uniqueObjects = Array.from(new Set(nonUniqueObjects.map((x) => { 
     return JSON.stringify(x); 
     }))).map((y) => JSON.parse(y)); 

問題是,當我運行的代碼我從真棒打字稿裝載機的錯誤,在以下

Argument of type '{}' is not assignable to parameter of type 'string'.

它沒有按」代碼牛逼可能喜歡的是.map((y) => JSON.parse(y));

我也想做到這一點,而無需使用VAR或讓,只有常量。

回答

0

找到解決方案。問題是與

.map((y) => JSON.parse(y)); 

我的打字稿編譯器似乎不喜歡「Y」不是一個字符串,即使把它做成一個字符串。所以我通過調用toString()來解決它。

.map((y) => JSON.parse(y.toString())); 

在一個陣列中除去非唯一對象的完整的解決方案:

const uniqueObjects = Array.from(new Set(nonUniqueObjects.map((x) => JSON.stringify(x)))).map((y) => JSON.parse(y.toString())); 

可能仍然需要做一些錯誤處理,但是這是一個不同的故事。

0

嘗試用傳播運營商:

let nonUniqueObjects = [{a : 1} , {b : 2}, {a : 1}, {b : 2}, {c : 3}] 
 

 
const uniqueObjects = [...new Set(nonUniqueObjects.map(x => JSON.stringify(x)))] 
 
\t \t  .map(y => JSON.parse(y)) 
 

 
console.log(uniqueObjects)

+0

仍然收到相同的錯誤。我很確定它與TypeScript有關,因爲這在javascript – user2515670

0

這裏,

var nonUniqueObjects = [{ 
 
    'id': 1, 
 
    'name': 'A' 
 
}, { 
 
    'id': 2, 
 
    'name': 'B' 
 
}, { 
 
    'id': 1, 
 
    'name': 'A' 
 
}]; 
 

 
var uniqueObjects = new Set(); 
 
nonUniqueObjects.forEach(e => uniqueObjects.add(JSON.stringify(e))); 
 
uniqueObjects = Array.from(uniqueObjects).map(e => JSON.parse(e)); 
 

 
console.log(JSON.stringify(uniqueObjects));

var uniqueObjects = new Set(); 
nonUniqueObjects.forEach(e => uniqueObjects.add(JSON.stringify(e))); 
uniqueObjects = Array.from(uniqueObjects).map(e => JSON.parse(e)); 
+0

中完美工作,我應該提到,但是我試圖在不使用var的情況下執行此操作,或者僅讓 – user2515670

+0

僅用於顯示示例。用代碼查看更新後的答案。 – Faisal

+0

如果uniqueObjects是一個常量,那麼您不能將Array.from-part分配給它。你最終會得到'Uncaught TypeError:賦值給常量變量'。 – user2515670