2016-10-13 4 views
0

私はSetを使用していますが、独自のプリミティブ値を格納できますが、プロパティ値に基づいて一意のオブジェクトを格納することはできません。javascript es6 set feature

は、ここに私のサンプルコードです:

"use strict" 
var set = new Set(); 
var student1 = { 
    "name":"abc", 
    "id":1 
} 

var student2 = { 
    "name":"xyz", 
    "id":1 
} 
var student3 = { 
    "name":"def", 
    "id":3 
} 
set.add(student1); 
set.add(student2); 
set.add(student3); 
console.log(set); 

私は自分のIDの値が同じである場合、すなわち2つのオブジェクトが同じになりますtheier ID値に基づいて、セット内の学生のオブジェクトを追加したいです。

+1

おそらく、idをキーにした 'Map'が必要です。 –

+0

'Set'リファレンスリンクに追加する前に重複した' id'をチェックして、最初に配列にオブジェクトを追加することができます:http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array –

答えて

0

代わりにMapを使用してください。

const map = new Map() 

const student1 = { 
    "name":"abc", 
    "id":1 
} 

const student2 = { 
    "name":"xyz", 
    "id":1 
} 
const student3 = { 
    "name":"def", 
    "id":3 
} 

map.set(student1.id, student1); 
map.set(student2.id, student2); 
map.set(student3.id, student3); 

console.log(map); 
+0

ありがとう、これは私の問題を解決する:) –

0

ES6 Setオブジェクトは、value equalityかなり多くの手段(これまでJavaScriptを使用してここにかかわらず、ビットニュアンスがあるとして)===チェックを使用しています。

あなたが本当に望むのは、おそらくid属性のマップです。

+0

'Set'は追加する前に' {prop:val} 'のようなオブジェクトを決して比較しません。 –