ну типа k - это счетчик совпадений, если он равен 1, то текущее число попадает в “уникальность”. т.к. в цикле число само себя один раз прогоняет, то как минимум 1 точно будет.
вот вам пример, почему нужно использовать понятные человеку переменные, т.к. позже код в любом случае подлежит аглификации и/или обфускации. решение через счетчик кстати не оптимальное, достаточно булева флага, либо использовать методы включения в массив.
Решила посредством отпиливания повторяющихся элементов. В консоли сработало, в минибраузере курса - выдаёт ошибку "Не удалось проинициализировать исходные переменные" (String). Что ему не нравится?
Сводка
var numbers = [1, 4, 5, 9, 2, 5, 1];
var findUnique = function (arr) {
var sorted = arr.sort();
for (var i = 0; i < sorted.length; i++) {
if (sorted[i] === sorted[i + 1]) {
delete sorted[i];
delete sorted[i + 1];
}
}
return sorted.filter(element => element !== null);
};
могу точно сказать, что из-за сортировки неверный порядок получился.
P.S. вкурил, я так понимаю у академии тут баг, uniqueNumbers должен всегда инициализироваться в начале в виде пустого массива. видимо по замыслу создателей нужно просто было push в него элементы.
вот так получше будет, но вариант не оптимальный через delete
let numbers = [1, 4, 5, 9, 2, 5, 1];
let uniqueNumbers = [];
const findUnique = arr => {
let newArr = arr.slice();
for (let i = 0; i < newArr.length; i++) {
for (let j = i + 1; j < newArr.length; j++) {
if (newArr[i] == newArr[j]) {
delete newArr[i];
delete newArr[j]
}
}
}
return newArr.filter(item => item != null);
};
uniqueNumbers = findUnique(numbers);
console.log(numbers);
У меня рабочий вариант вышел аналогичный, сначала пытался изобрести что то по аналогии с тем что было выше, но не получалось. В этом решении единственный вопрос относиться к эффективности, ведь если я не ошибаюсь indexOf работает как цикл, из за чего мы имеем решение через 3 цикла, что ресурсозатратнее чем через 2. (Возможно indexOf лучше оптимизирован, и тогда все мои рассуждения гроша ломанного не стоят, хз)
Кто может объяснить как работает этот вариант? Разве numbers[i] не будет всегда равен numbers[j]? Получается просто массив весь перепишется из одного в другой. Что я не понимаю?
а в какой главе описан lastIndexOf?
for (var i=0;i<=numbers.length-1;i++) {
var t = 0;
for (var q=0;q<=numbers.length-1;q++) {
if (numbers[i] !== numbers[q] && i !== q) {
t++;
if ( t === numbers.length-1) {
uniqueNumbers.push(numbers[i]);
}
}
}
}