function uniqueArr(arr){
/**
* Принимает массив и возвращает его уникальные значения.
*/
const accumulate = []; // сохраняет уникальные значения
for (let foo of arr){
let count = 0; // счётчик для повторяющихся элементов
for (let bar of arr){
if (foo === bar) count++; // кол-во повторяющихся элементов
}
if (count === 1){
// если значение в массиве только одно,
// добавляет это значение в конечный массив
accumulate.push(foo);
}
}
return accumulate
}
const newArr = Array
.from(arr.reduce((acc, n) => acc.set(n, (acc.get(n) ?? 0) + 1), new Map))
.filter(n => n[1] === 1)
.map(n => n[0]);
arr.splice(0, arr.length, ...Array
.from(arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map))
.reduce((acc, n) => (n[1] || acc.push(n[0]), acc), [])
);
Скорость такого кода O(n^3n)
Ещё одни важный нюанс - обернуть код в функцию.
Это не проблема, просто задание...
[1,1,2,3,4,5,5,6,6,6,6,6,4,1,6,7].reduce((acc, item, i, arr) => {
if (acc.has(item)) return acc;
let idx = arr.indexOf(item);
let lastIdx = arr.lastIndexOf(item);
if (idx === lastIdx) {
acc.add(item);
};
return acc;
}, new Set());
Разрешаю вам сделать это самостоятельно.
С заданиями - на фриланс
по массиву пробежались несколько раз сложность не меняется
я могу с таким успехом 1000 раз пробежаться по массиву и сказать, что скорость линейная. Это не так. Читайте книжки)
Вместо того, чтобы доказывать, что я дурак, лучше приложите усилие на решение задачи
Скорость такого кода O(n^3n). (ложь)
Это намного дольше, чем использование цикл в цикле из уроков для новичков. (отсутствие логического мышления)
просто задание - написать функцию. (а это сайт "ответы на вопросы", а не "решение задач")
Ваш код было сложно читается. (допустим, я бы мог согласиться если бы не...)
Проблема ... в отсутствии комментариев и банальной логики. (...вот этот бред, особенно про комментарии, которые в коде должны быть только в исключительных случаях)
с соблюдением всех основных требований.
непонимание базовых вещей
какая сложность у такого редюса ?
[1,1,2,3,4,5,5,6,6,6,6,6,4,1,6,7].reduce((acc, item, i, arr) => { if (acc.has(item)) return acc; let idx = arr.indexOf(item); let lastIdx = arr.lastIndexOf(item); if (idx === lastIdx) { acc.add(item); }; return acc; }, new Set());
После этих слов, дальнейшие Ваши комментарии не стоят внимания. О-большое измеряет не сложность, а скорость.