2016-10-13 7 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); 

Я хочу, чтобы добавить объект студента в наборе на основе theier значения идентификаторов т.е. два объекта будет одинаковым, если значения их идентификаторов одинаковы.

+1

Возможно, вам нужна «Карта» с ключом id. –

+0

Вы можете сначала добавить объекты в массив, внутри этого, проверить дубликат 'id' перед добавлением в' Set', ссылку ссылки: 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} 'перед добавлением. –

Смежные вопросы