Комментарии 40
Помимо того, что почти половина "трюков" заключается в использовании стандартных и вполне себе известных методов массивов вроде reverse() и splice(), статья ещё и вводит некоторые сомнительные ограничения вроде — как трансформировать массив без map(). Зачем? Какое у from() преимущество, кроме менее лаконичной записи? Чем не угодили concat(), который работает быстрее спреда и для более чем двух массивов опять же позволяет получить более короткую запись?)
Зря вы выбрали именно эту статью. Скажем там в одном из примеров O(n^2) там где хватит O(n). Зачем такому учить новичков? Метод .reduce
описан чуть менее чем никак, просто "магия". Вообще не упомянуто про то, что .reverse
и .sort
мутируют массив (и даже даётся ложная иллюзия того, что это не так, за счёт присваивания значения новой переменной). Вообще статья попахивает, если честно.
Зачем? Какое у from() преимущество, кроме менее лаконичной записи?
Он работает с итерируемыми обектами, не являющимися массивами и соответственно не имеющими метода map. Например DOM API возвращает всё что угодно, но не массивы, к сожалению.
const numOne = [0, 2, 4, 6, 8, 8];
const numTwo = [1, 2, 3, 4, 5, 6];
const duplicatedValues = [...new Set(numOne)].filter(item => numTwo.includes(item));
console.log(duplicatedValues); // вернет [2, 4, 6]
Автор охренел? Нахрена было создавать набор, если потом всё равно проверяем includes в массиве?
const numOne = [0, 2, 4, 6, 8, 8];
const numTwo = [1, 2, 3, 4, 5, 6];
const mySet = new Set(numOne);
const duplicatedValues = numTwo.filter(value => mySet.has(item));
const numOne = [0, 2, 4, 6, 8, 8];
const numTwo = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
заполнит duplicatedValues так: [ 2, 4, 6, 4, 2 ]
const numOne = [0, 2, 4, 6, 8, 8];
const numTwo = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1];
const mySet = new Set(numOne);
const duplicatedValues = [...new Set(numTwo.filter(item => mySet.has(item)))];
console.log(duplicatedValues); // вернет [2, 4, 6]
Ну или вначале из numTwo сделать набор.
Для больших массивов можно сравнить количество элементов в mySet и numTwo, и на основании этого использовать либо первый вариант, либо второй.
А словарем я называю то, что получают в 5 совете:
{0: 'banana', 1: 'apple', 2: 'orange', 3: 'watermelon', 4: 'apple', 5: 'orange', 6: 'grape', 7: 'apple'}
const a = {1.0: 2.0}
Object.keys(a) // [ "1" ]
Впрочем, есть и хорошие человеческие словари.
{ '0': 'banana', '1': 'apple', '2': 'orange', '3': 'watermelon', '4': 'apple', '5': 'orange', '6': 'grape', '7': 'apple' }
. То-есть, числовые ключи преобразуются в строки. Кстати, в оригинале та же неточность.5 и 8 — это спасибо спреду скажите, лучше бы пример на ES5 дали.
А, ну и пример с использованием мат.рандом вообще банальность дикая, как по мне.
Это больше на шпаргалку по языку «для себя» похоже, чем на статью для хабра, уж извините.
It depends. Зависит от задачи. Если на ваш массив уже есть где-то другие ссылки, и вы желаете чтобы они всё также вели на актуальный набор данных, то вам очень даже важно ничего не поломать.
Приведите не синтетический пример.
с какой целью мне понадобится делать ему lenght = 0
дабы обеспечить консистентность данных при обнулении коллекции.
Приведите не синтетический пример
Вы же пишете, что у вас 10+ лет опыта в программировании. Это такой троллинг?
Дружище, ну хоть вычитай то, что написал. Как «пере» массив, как полуь массив, это же позор.
13 полезных приёмов по работе с массивами в JavaScript, которые могут вам пригодиться