Резюме:
При итерации по массиву мы часто хотим достичь одной из следующих целей:
- Создать новый массив, оставить исходный без изменений: используйте
map()
- Выполните действие с / на каждом элементе массива и, возможно, измените массив: используйте
for..of
, forEach()
или обычный цикл for
Примеры:
const arr1 = [1, 2, 3];
const arr2 = arr1.map(el => el * 2);
// with map we create a new arr2, arr1 is left untouched
console.log(arr2, arr1);
// regular for loop
for (let i = 0; i < arr1.length; i++) {
console.log(arr1[i]);
}
console.log('\n');
// for of loop
for (let el of arr1) {
console.log(el);
}
console.log('\n');
// forEach()
arr1.forEach(el => {
console.log(el)
})
Какой использовать?
В большинстве случаев это не так важно. Однако есть некоторые крайние случаи, когда один тип итерации может быть более подходящим для ваших нужд:
- Если вы хотите манипулировать массивом, но оставить старый массив нетронутым (например, функциональное программирование), вы можете лучше всего использовать
map()
для итерации. Если вам не нужно возвращать новый массив, не используйте map()
. map()
имеет самую низкую производительность среди всех циклических методов.
- Когда производительность играет роль, когда вам нужно многократно повторять, обычный цикл for:
for(let i=0; i < arr.length; i++) {}
часто имеет (может отличаться из-за различий в движке JS) лучшую производительность, потому что это самая итеративная форма итерации.