Столкнулась с тем что не понимаю когда применять метод map а когда forEach, так же постоянно встречаю reduce, но неясно почему выбирают его а не напрмер тот же map. Кода следует использовать map, когда reduce, а когда forEach? В чем их основное отличие?
Ответ Методы map, forEach, и reduce действительно имеют много общего, что и когда использовать зависит от того, какой именно результат по итогу требуется получить. Представим что у нас есть массив: const locations = [ {country: "Россия", population: 10}, {country: "Китай", population: 100}, {country: "США", population: 20} ] Если нам нужно просто выполнить определенное действие для каждого элемента массива, то тут подойдет метод forEach: locations.forEach(location => { console.log(location) // мы получим три вывода в консоль // по одному для каждой локации // {country: "Россия", population: 10} // {country: "Китай", population: 100} // {country: "США", population: 20} }) // или так, если нам нужно только определенное значение locations.forEach(location => { console.log(location.country) // Россия // Китай // США }) // или так, по количеству значений в массиве locations.forEach(() => { console.log("Как дела?") // Как дела? // Как дела? // Как дела? }) Если мы хотим трансформировать наш массив и занести результаты в переменную, то тут метод map будет более уместен чем forEach, поскольку первый по итогу сразу вернет новый массив. Посмотрим на разницу forEach vs map в случае когда нам нужно "обернуть" каждое название страны в HTML таг: // через forEach const result = [] locations.forEach(location => { result.push(`
${location.country}
`) }) console.log(result) // ["
Россия
", "
Китай
", "
США
"] // с использованием map const result = locations.map(location => `
${location.country}
`) console.log(result) // ["
Россия
", "
Китай
", "
США
"] Метод reduce отличается от map тем что он возвращает финальное "значение". Допустим мы хотим посчитать суммарный размер населения: const result = locations.reduce((total, location) => { return total + location.population }, 0) console.log(result) // 130 Это достаточно простой пример, но "финальным значением" может быть не только число, а, например, объект или массив, что делает метод reduce поистине мощным инструментом трансформаций.