JavaScript

Дан целочисленный массив размера N.Удалить из массива все элементы, встречающиеся менее трёх раз

Помогите братья уже второй день голову ломаю не получается решить задачу
Надо код на JavaScripts
Если без финтов, только циклами, можно так:

let arr = [1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 5, 1, 4, 3, 3, 8, 7, 45, 45, 3, 45, 78];

let obj = {};
for (let num of arr) {
    obj[num] = obj[num] ? obj[num] + 1 : 1;
}
/* Каждое новое число сохраняется в качестве ключа объекта, и получает значение 1. А если такой уже есть - значене увеличивается на 1. Так считается количество чисел */

console.log( obj );

for (let key in obj) {
    if (obj[key] < 3) {
        delete obj[key];
    } /* Удаляются те ключи, которые хранят число меньше 3-х */
}

let temp = [];

for (let num of arr) {
    if( num in obj ){
/* Если есть такое число в качестве ключа - значит оно встретилось больше 3-х раз */
        temp.push( num );
    }
}

arr = temp;

console.log( arr );
АК
Александр Котарев
62 360
Лучший ответ
Андрей Оледник Я люблю тебя бро
Свой вариант писать не буду, но алгоритм по моему таков:
Цикл, в нем счетчик с изначальным значением 0 и вложенный цикл который проверяет элемент на совпадение. Есть совпадение - плюсуем счетчик. Если итоговое значение счетчика после окончания прохода по массиву меньше 3 - ага, полундра, нужно действовать. Присваиваем в новую переменную текущее значение массива и каким нибудь новым циклом отыскиваем все ее вхождения в массиве и удаляем. Счетчик обнуляем.
Как-то так...
const arr = [1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 5, 1, 4, 3, 3, 8, 7, 45, 45, 3, 45, 78];

arr.filter((item, index, source) => source.filter(i => i === item).length >= 3)
Михаил .
Михаил .
5 745
Берик Омайбек По факту те же 2 цикла, а понтов то... )))))
Евгений Орлов let arr = [1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 5, 1, 4, 3, 3, 8, 7, 45, 45, 3, 45, 78];
arr = arr.filter((item, index, source) => source.filter(i => i === item).length >= 3);