#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,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);