Pull to refresh

Comments 18

JavaScript ES6: оператор расширения

Не надо так обзывать спред оператор. Вас никто не поймёт.
«оператор распаковки»? По крайней мере в python подобная операция именно так называется.
интересный пример «копирование массивов»
не знал что так можно было)
Один из самых классных применений пропустили.
Удаление дубликатов из массива:
var myArray = ['a', 1, 'a', 2, '1'];
let unique = [...new Set(myArray)];
// equal to
var items = [4,5,4,6,3,4,5,2,23,1,4,4,4]
var uniqueItems = Array.from(new Set(items))


Что существенно лучше вариантов с фильтром:
var myArray = ['a', 1, 'a', 2, '1'];
var unique = myArray.filter(function(v, i, a) {
  return  a.indexOf(v) === i;
} 

И не такое громоздкое как с помощью .reduce():
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let result = arr.sort().reduce((init, current) => {
    if (init.length === 0 || init[init.length - 1] !== current) {
        init.push(current);
    }
    return init;
}, []);
И часто в типичных проектах приходится фильтровать массив из 10к обьектов? Намного чаще приходится работать с массивами в 20-100 элементов, иногда даже внутри циклов (например, при парсинге того же самого массива в 10к обьектов)

Если в массиве всего 10 элементов — то способ не важен, потому что узким местом этот код точно не будет являться, если только он не выполняется внутри цикла.


Что же до вашего варианта "устраняем дубликаты в массиве из 10 элементов в цикле" — то такой странный код лучше просто не писать.


Кстати, уже на 100 элементах spread обгоняет sort().reduce...

Конечно, мы же код пишем оценивая его громоздкость, О большое для дураков.

Асимптотика у [...new Set(myArray)] тоже в порядке — линейная, в отличии от квадратичной у фильтра и N log N у громоздкого sort().reduce()

вы не поверите, но во множестве случаев, то как код выглядит и читается важней производительности

Использование с генераторами:


function* fibonacci ( n )
{
    const infinite = !n && n !== 0;
    var current = 1,
        next    = 1;
    yield current;
    n && n--;
    while ( infinite || n-- ) {
        [current, next] = [next, current + next];
        yield current;
    }
    return current;
}

var [...arr] = fibonacci(10);
// [ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ]
Привет из Perl'а, где «разворачивание» массивов(и даже хэшей) по ссылке — это конструкция языка уже больше 20 лет
Sign up to leave a comment.