Answer

Answer

t.me/js_test

Ответ:

function unique(iterator) {
    return Array.from(iterator).filter((value, index, array) => {
        return index === array.findIndex((item) => Object.is(item, value));
    });
}

Объяснение:

С помощью метода Array.from преобразуем итерируемый объект (iterator) в массив. Далее у получившегося массива вызываем метод filter и передаём туда функцию коллбэк, внутри этой функции и происходит самое интересное: если индекс текущего перебираемого элемента равен индексу который мы находим с помощью ещё одного метода массива findIndex, значит такой элемент единственный и он попадает в результирующий массив, в противном же случае таких элементов оказывается два (или больше) и текущий элемент исключается из результата.

Внутри метода findIndex для сравнения используется Object.is вместо тройного равно, это нужно для того чтобы NaN и разные нули правильно отрабатывали.

Код для проверки:

function unique(iterator) {
    return Array.from(iterator).filter((value, index, array) => {
        return index === array.findIndex((item) => Object.is(item, value));
    });
}

console.log(unique([1, 2, 2, 3, 4, 4])); // [ 1, 2, 3, 4 ]
console.log(unique([1, NaN, NaN, 3])); // [ 1, NaN, 3 ]
console.log(unique("aabcc")); // [ 'a', 'b', 'c' ]
console.log(unique([0, -0, +0])); // [ 0, -0 ]

Report Page