查找具有相似属性且彼此相邻的对象

时间:2018-02-22 16:57:06

标签: javascript

我有一系列具有属性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}]

2 个答案:

答案 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;
 }
}