Получаю 8 елементов в массиве вместо 3
let set = [];
let john = {
name: "John"
};
let pete = {
name: "Pete"
};
let mary = {
name: "Mary"
};
set.push(john);
set.push(pete);
set.push(mary);
set.push(john);
set.push(mary);
arr = new Map();
for (let key of set) {
if (!arr.has(key)) {
arr.set(key, 1);
set.push(key);
}
}
console.log(set);
По идее тут должны оставаться уникальные значения в map которые я добавляю в массив, в map добавляется 3 ключа но в массив уже почему-то добавляется 8 объектов
////Как я решил проблему(оказалось я затупил и запутался что и куда я добавляю)
arr = new Map();
for (let key = 0; key < set.length; key++) {
if (!arr.has(set[key])) {
arr.set(set[key], 1);
} else {
set.splice(key, 1);
key--;
}
}
Ответы (1 шт):
Автор решения: Daniil
→ Ссылка
Я не эксперт в JavaScript, но по моему, уникальный ключ может быть только в объекте. А вот в массив, по идее, может состоять из -
[1,1,1,1,1,1,1,1,1,1]
Все, что написано выше - не точно, будьте любезны, можете меня поправить и я изменю ответ
Можете написать ф-ию, которая оставит только уникальные значение.
ВНИМАНИЕ!, функция подойдет только для не больших массивов.
function unique(arr) {
let result = [];
for (let str of arr) {
if (!result.includes(str)) {
result.push(str);
}
}
return result;
}
let strings = ["кришна", "кришна", "харе", "харе",
"харе", "харе", "кришна", "кришна", ":-O"
];
alert( unique(strings) )