2017-08-09 6 views
0

TypeScriptコードにオブジェクトの配列があり、重複するオブジェクトを取得する必要があります。 次のコードは、私のために働くん:問題は、私は、コードを実行したときに、私は次のようTypeScriptの配列から重複したオブジェクトを取得する

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

それはdoesnのコードで素晴らしい活字体ローダーからエラーを取得する

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

ですおそらく同様です.map((y) => JSON.parse(y));

私はまた、varまたはletを使用せずにこれを達成したい、constだけです。

答えて

0

解決策が見つかりました。問題は、それが文字列にそれを作っていても、「Y」の文字列ではなかったことを好きではないように思われた

.map((y) => JSON.parse(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

まだ同じエラーが発生しています。私はそれが完全にjavascriptで動作するので、これはTypeScriptと関係があると確信しています。 – 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がconstの場合、Array.from-partを代入することはできません。 「Uncaught TypeError:Constant variableへの代入」で終わることになります。 – user2515670

関連する問題