Методы forEach()
и map()
являются методами массивов и выполняют итерацию по элементам массива.
Метод map()
создаёт новый массив с результатом вызова указанной callback
функции для каждого элемента массива.
Обновление массива позиций игроков:
let playerPositions = [
{ x: 10, y: 20 },
{ x: 20, y: 30 },
{ x: 30, y: 40 }
];
let updatedPositions = playerPositions.map(pos => ({ x: pos.x + 5, y: pos.y + 10 }));
console.log(updatedPositions);
/*
[
{ x: 15, y: 30 },
{ x: 25, y: 40 },
{ x: 35, y: 50 },
]
*/
Метод forEach()
выполняет callback
функцию для каждого элемента в массиве.
Обновление позиции каждого юнита-врага в массиве:
let enemies = [
{ name: "Гоблин", x: 100, y: 50 },
{ name: "Скелет", x: 200, y: 100 },
{ name: "Орк", x: 300, y: 150 }
];
enemies.forEach(enemy => {
enemy.x += 10;
enemy.y += 5;
});
console.log(enemies);
/*
[
{ name: "Гоблин", x: 110, y: 55 },
{ name: "Скелет", x: 210, y: 105 },
{ name: "Орк", x: 310, y: 155 },
]
*/
Основное отличие между forEach()
и map()
заключается в том, что forEach()
используется, когда нужно выполнить действие для каждого элемента массива, в то время как map()
используется, чтобы создать новый массив, преобразовывая каждый элемент исходного массива.
Пример с map()
:
let enemies = [
{ name: "Гоблин", x: 100, y: 50 },
{ name: "Скелет", x: 200, y: 100 },
{ name: "Орк", x: 300, y: 150 }
];
let result = enemies.map(pos => ({ x: pos.x + 5, y: pos.y + 10 })).filter(pos => pos.x > 200)
console.log(result);
/*
[
{ x: 205, y: 110 },
{ x: 305, y: 160 },
]
*/
Пример с forEach()
:
let enemies = [
{ name: "Гоблин", x: 100, y: 50 },
{ name: "Скелет", x: 200, y: 100 },
{ name: "Орк", x: 300, y: 150 }
];
let result = enemies.forEach(pos => ({ x: pos.x + 5, y: pos.y + 10 })).filter(pos => pos.x > 200)
console.log(result);
// TypeError: Cannot read properties of undefined (reading 'filter')