почему оно выводит пустой массив?

Получить массив только уникальных значений с помощью 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,[]));

→ Ссылка