Как вывести только те значения которые не повторяются Java Script
Есть простой массив const arr = [6, 1, 2, 4, 1, 6] // на выходе должно быть 2,4
Знаю как решить через filtr, но хочется и другие варианты , например через for или reduce. Но как-то не получается, фот мои наброски:
const arr = [6, 1, 2, 4, 1, 6];
let res = [];
let count = 0;
for (el of arr) {
console.log("el", el, "arr.indexOf(el)", arr.indexOf(el), "count", count);
if (arr.indexOf(el)===count) {
res.push(el);
}
count++;
}
console.log(res);
Ответы (3 шт):
Автор решения: Rostyslav Kuzmovych
→ Ссылка
Например с помощью lastIndexOf и цикла forEach:
const arr = [6, 1, 2, 4, 1, 6],
res = [];
arr.forEach(e => arr.indexOf(e) == arr.lastIndexOf(e) ? res.push(e) : {})
console.log(res);
или lastIndexOf и reduce:
const arr = [6, 1, 2, 4, 1, 6];
const res = arr.reduce((acc, e) => (arr.indexOf(e) == arr.lastIndexOf(e) ? acc.push(e) : {}, acc), [])
console.log(res);
Автор решения: cauf
→ Ссылка
Самый простой вариант - решение "в лоб":
const arr = [6, 1, 2, 4, 1, 6];
var counters = {};
for (el of arr) {
if (counters[el] == undefined) {
counters[el] = 1;
} else {
counters[el]++;
}
}
for (key in counters) {
if (counters[key] == 1) {
console.log(key);
}
}
Автор решения: humster_spb
→ Ссылка
Вариант с reduce:
const arr = [6, 1, 2, 4, 1, 6];
const result = arr.reduce((acc,item) => {
if(acc.includes(item)) { //если находим повторяющийся элемент
acc.splice(acc.indexOf(item),1); //удаляем его
return acc;
}
return acc.concat(item);
}, [])
console.log(result);