Почему мой набор не может удалить дубликаты элементов

#javascript #arrays

Вопрос:

 let arr = new Set();
arr.add([1,1,1,1]);
arr.add([1,1,1,1]);
console.log(arr);
 
  1. Почему вывод является [[1,1,1,1], [1,1,1,1]] ?
  2. Если я хочу удалить дубликаты элементов, я должен что-то предпринять? (Я хочу сделать [[1,1,1,1]])

Комментарии:

1. Какого результата вы ожидаете?

2. @Энди, он, вероятно, хочет этот вывод: Установить(1) { [ 1, 1, 1, 1 ] }

3. Обратите также внимание, что эти массивы являются недопустимым синтаксисом.

4. Вот почему я спросил. Операция могла просто захотеть [1] .

5. Да, он не поставил запятую, событие, хотя он добавляет, результат останется прежним

Ответ №1:

Ссылки на объекты различны. Аналогично тому, как {}=={} возвращает false.

Вы можете использовать JSON.stringify (), чтобы преодолеть это:

 console.log([1,1,1,1,] === [1,1,1,1]);

let arr = new Set();
arr.add([1,1,1,1]);
arr.add([1,1,1,1]);

let ans = new Set([...arr].map(x => JSON.stringify(x)));
console.log(ans);
 

Комментарии:

1. Это очень полезный совет. Большое вам спасибо~

Ответ №2:

Это потому, что вы добавляете массив внутри своего набора, НАБОР не сравнивает ваш элемент глубоко и [1, 1] !== [1, 1] потому что у них разные ссылки.

Я думаю, ты хотел сделать

 arr = new Set();
arr.add(...[1, 1, 1, 1]);
arr.add(...[1, 1, 1, 1]);
console.log(arr);