我有一系列具有属性theaterID和price的对象,如果对象具有相同的theatherID并且彼此相邻,我想要将价格加在一起。
[{theatherID: 1, price: 10.0}, {theatherID:1, price: 15.0}, {theatherID:55, price: 2.0}, {theatherID:1, price:3.0}]
输出应为
[{theatherID: 1, price: 25.0}, {theatherID:1, price: 25.0}, {theatherID:55, price: 2.0}, {theatherID:1, price:3.0}]
答案 0 :(得分:1)
这是数组方法reduce的一个很好的候选者。它需要一个带有两个参数的函数,并对数组中的每个元素执行一次。
在第一遍prev
等于你传递的任何内容reduce
中的第二个参数,在这种情况下它将是一个空数组。参数next
等于数组的i
元素。 (在第一遍中,它是第一个元素,第二个是第二个,等等。)
当reduce
函数通过数组时,您可以检查next
是否有一个匹配prev
中最新元素的theatherID。如果是,请更新price
个属性并将next
添加到我们正在构建的数组(prev
)。
var arr = [{theatherID: 1, price: 10.0}, {theatherID:1, price: 15.0}, {theatherID:55, price: 2.0}, {theatherID:1, price:3.0}];
var newArr = arr.reduce((prev, next) => {
var latest = prev[prev.length - 1];
if(latest && latest.theatherID === next.theatherID) {
var total = latest.price + next.price;
latest.price = total;
next.price = total;
}
prev.push(next);
return prev;
}, []);
console.log(newArr);
答案 1 :(得分:1)
试试这个:
var x = [{theatherID: 1, price: 10.0}, {theatherID:1, price: 15.0}, {theatherID:55, price: 2.0}, {theatherID:1, price:3.0}];
for(i=0; i<x.length-1; i++){
if (x[i].theatherID == x[i+1].theatherID){
var tmp = x[i+1].price;
x[i+1].price += x[i].price;
x[i].price += tmp;
}
}