почему оно выводит пустой массив?
Получить массив только уникальных значений с помощью reduce [1, 9, 0, 1, 5, 9, 1, 6] -> [1, 9, 0, 5, 6]
let arr = [1, 9, 0, 1, 5, 9, 1, 6];
let newArr = arr.reduce((acc, value, i) => {
acc.push(value);
let length = acc.length - 1;
arr.forEach(value2 => {
if (acc[length] === value2) {
acc.pop();
}
})
return acc;
}, []);
console.log(newArr);
Ответы (1 шт):
Автор решения: entithat
→ Ссылка
Для тех, кто захочет найти уникальные значения правильно:
const arr = [1, 9, 0, 1, 5, 9, 1, 6];
console.log([...new Set(arr)]);
console.log(Array.from(new Set(arr)));
Для автора:
Что-то вы слишком усложнили. reduce проходится по всех элементах, поэтому просто смотрим, есть ли текущий элемент в промежуточном списке acc с помощью indexOf. Если есть, то просто пропускаем. Если нет - добавляем.
const arr = [1, 9, 0, 1, 5, 9, 1, 6];
const newArr = arr.reduce((acc, cur) => {
if (acc.indexOf(cur) === -1) {
return acc.push(cur), acc;
}
return acc;
}, []);
console.log(newArr);
Однострочный вариант:
const arr = [1, 9, 0, 1, 5, 9, 1, 6];
console.log(arr.reduce((a,c)=>a.indexOf(c)===-1?(a.push(c),a):a,[]));