var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg])
Первые два аргумента функции обратного вызова Array.prototype.map()
: currentValue
т.е. элемент массива и второе значение - это его индекс, а не prev и следующие элементы.
Что вы ищетеэто что-то вроде этого.
const items = [
{ name: "apple", price: "10" },
{ name: "banana", price: "1" },
{ name: "orange", price: "2" },
{ name: "apple", price: "5" },
{ name: "orange", price: "2.5" },
{ name: "banana", price: "3" },
{ name: "strawberry", price: "7" },
{ name: "apple", price: "12" }
];
const combine = items.reduce((acc, item) => {
if (acc[item.name] !== undefined) {
acc[item.name] += Number(item.price);
} else acc[item.name] = Number(item.price);
return acc;
}, {});
const fruitKeys = Object.keys(combine);
newItem = fruitKeys.map(item => ({ name: item, price: combine[item] }));
console.log(newItem);
Я разделил решение на два этапа: объединение и реконструкция объекта, чтобы вы могли четко видеть, что происходит.
Я настоятельно рекомендую вамчтобы обратиться к документации по методу Reduce , чтобы понять, как он работает