Если вы чем-то похожи на меня, иногда вам нужно что-то разобрать, чтобы действительно понять, как это работает. В начале моего пути к кодированию я изо всех сил пытался понять встроенные в JavaScript методы итератора массива и то, что именно делал каждый из них. Только когда я разобрал несколько из них и перестроил их с нуля, я полностью понял, как работает каждый из них. У меня была помощь в этом процессе, рекомендации, которые помогли мне понять, но многие из вас могут быть сами по себе. Я пишу этот блог, чтобы помочь тем, кто работает самостоятельно, глубже понять краеугольный камень JavaScript и, надеюсь, вдохновить других сделать то же самое.
Существует несколько вариантов встроенных методов итератора JavaScript. Методы, с которыми мне было труднее всего, были:
- .для каждого( )
- .карта( )
- .находить( )
- .фильтр()
- .уменьшать( )
Давайте углубимся в то, как работает каждый метод, и посмотрим, как они выглядят, созданные вручную.
для каждого
Описание : Этот метод вызывает функцию для каждого элемента массива.
Пример: Вызывает функцию для каждого элемента фруктов.
const fruits = ["apple", "orange", "cherry"]; fruits.forEach(myFunction);
Теперь давайте разберем его и построим сами как функцию:
const array = [1, 2, 3]; function myEach(array, callback) { for (let i = 0; i < array; i++) { callback (array[i]); } return array; } myEach(array);
карта
Описание : Этот метод создает новый массив путем однократного вызова функции для каждого элемента массива.
Пример: Умножьте все значения в массиве на 10.
const numbers = [65, 44, 12, 4]; const newArr = numbers.map(myFunction) function myFunction(num) { return num * 10; }
Наша разобранная версия:
const array = [1, 2, 3]; function myMap(array) { const newArray = []; for (let i = 0; i < array.length; i++) { newArray.push(array[i]); } return newArray; } myMap(array);
найти
Описание: Этот метод возвращает значение первого элемента, прошедшего проверку.
Пример: Найти значение первого элемента со значением больше 18.
const ages = [3, 10, 18, 20]; function checkAge(age) { return age > 18; } function myFunction() { document.getElementById("demo").innerHTML = ages.find(checkAge); }
Сломанный:
const array = [1, 2, 3]; function myFind(array) { for (let i = 0; i < array.length; i++) { if(array[i]) { return array[i]; } } } myFind(array);
фильтр
Описание: Этот метод создает новый массив, заполненный элементами, прошедшими проверку, предоставленную функцией.
Пример: Возвратите массив всех значений в age[], которые равны 18 или старше.
const ages = [32, 33, 16, 40]; const result = ages.filter(checkAdult); function checkAdult(age) { return age >= 18; }
Сломанный:
const array = [1, 2, 3]; function myFilter(array) { let result = []; for (let i = 0; i < array.length; i++) { if(array[i] === true) { result.push(array[i]); } } return result; } myFilter(array);
уменьшить
Описание: Этот метод выполняет функцию редуктора для элемента массива. Этот метод возвращает одно значение: накопленный результат функции.
Пример: Округлите все числа и отобразите сумму.
const numbers = [15.5, 2.3, 1.1, 4.7]; document.getElementById("demo").innerHTML = numbers.reduce(getSum, 0); function getSum(total, num) { return total + Math.round(num); }
Наша разобранная версия:
const array = [1, 2, 3]; function myReduce(array,acc) { if(!acc) { acc = array[0]; array = array.slice(1); } for (let i= 0; i < array.length; i++) { acc = (acc,array[i],array); } return acc; } myReduce(array);
Если вы новичок в программировании и разбитые версии немного пугают, я нашел этот рисунок очень полезным для понимания некоторых встроенных методов итератора:
Вывод:
Чтобы лучше понять некоторые типы встроенных методов массива в JavaScript, мы изучили определения каждого метода, рассмотрели пример, а затем создали функциональность с нуля. Мы можем использовать это более глубокое понимание для создания лучшего и более мощного кода.
"Я либо найду способ, либо проложу его".
— Ганнибал Барка
Большое спасибо за чтение и удачного кодирования!
Ресурсы и дополнительная литература:
Для определений и примеров:
Для графики:
Чтобы проверить код: