Comments 18
JavaScript ES6: оператор расширения
Не надо так обзывать спред оператор. Вас никто не поймёт.
интересный пример «копирование массивов»
не знал что так можно было)
не знал что так можно было)
В блоге medium.com/@frontman можно найти много примеров такого рода, например:
Юзкейсы …spread оператора goo.gl/dHLhQX
Юзкейсы …spread оператора goo.gl/dHLhQX
arr2.push['d'];
со скобками опечатались
Один из самых классных применений пропустили.
Удаление дубликатов из массива:
Что существенно лучше вариантов с фильтром:
И не такое громоздкое как с помощью .reduce():
Удаление дубликатов из массива:
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;
}, []);
Только, к сожалению, у spread производительность низкая. Даже, казалось бы, громоздкий sort().reduce и то оказывается быстрее.
Вы бы еще на массиве из одного элемента производительность измеряли...
На больших объемах spread оказывается самым быстрым.
И часто в типичных проектах приходится фильтровать массив из 10к обьектов? Намного чаще приходится работать с массивами в 20-100 элементов, иногда даже внутри циклов (например, при парсинге того же самого массива в 10к обьектов)
Если в массиве всего 10 элементов — то способ не важен, потому что узким местом этот код точно не будет являться, если только он не выполняется внутри цикла.
Что же до вашего варианта "устраняем дубликаты в массиве из 10 элементов в цикле" — то такой странный код лучше просто не писать.
Кстати, уже на 100 элементах spread обгоняет 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.
JavaScript ES6: оператор расширения