Как вывести только те значения которые не повторяются 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);

→ Ссылка