繁体   English   中英

Javascript 对象数组和总和项

[英]Javascript array of objects group and sum items

我正在努力获得所需的output对象数组。 所以让我有这个 object 数组:

var cars = [
    { make: 'audi', model: 'r8', quantity: '5' }, 
    { make: 'audi', model: 'rs5', quantity: '10'}, 
    { make: 'ford', model: 'mustang', quantity: '3' }, 
    { make: 'kia', model: 'optima', quantity: '9' },
    { make: 'audi', model: 'rw7', quantity: '2' },
    { make: 'ford', model: 'fusion', quantity: '7' }
],

所需的 Output

var cars = [
    { make: 'audi', sumQuantity: '17' }, 
    { make: 'ford', sumQuantity: '10' }, 
    { make: 'kia',  sumQuantity: '9' }
],

我试图通过他们 map 但没有解决我的问题,希望你们在这里帮助。 谢谢。

这工作正常

Object.values(
  cars.reduce((agg, car) => {
    if (agg[car.make] === undefined) agg[car.make] = { make: car.make, sumQuantity: 0 }
    agg[car.make].sumQuantity += +car.quantity
    return agg
  }, {})
)

可能不是最简洁的解决方案,因为我不是 JavaScript 大师。

首先,我们以更易于处理的格式将所有汽车加起来。 然后我们将其重建为上面要求的格式。

var newCars = [];
var makes = {};

for (var i=0; i<cars.length; i++) {
    var car = cars[i];
    var keys = Object.keys(makes)
    if (keys.includes(car.make)) {
        makes[car.make] += parseInt(car.quantity)
    } else {
        makes[car.make] = parseInt(car.quantity)
    }
}

var keys = Object.keys(makes)

for (var i=0; i<keys.length; i++) {
    newCars.push({make: keys[i], sumQuantity: makes[keys[i]]})
}

你可以做这样的事情

function desiredOutput(cars) {
  var output = []

  for (let i = 0 ; i < cars.length ; i++) {
    output.push({"make": cars[i].make, "sumQuantity": "Value based on your logic."});
  }

  return output 
}

var cars = [
    { make: 'audi', model: 'r8', quantity: '5' }, 
    { make: 'audi', model: 'rs5', quantity: '10'}, 
    { make: 'ford', model: 'mustang', quantity: '3' }, 
    { make: 'kia', model: 'optima', quantity: '9' },
    { make: 'audi', model: 'rw7', quantity: '2' },
    { make: 'ford', model: 'fusion', quantity: '7' },
]

let output = desiredOutput(cars);

我在这个线程中寻找一个快速的、几乎“单行”的答案,前提是这是一个微不足道但常见的练习。

我找不到任何我喜欢的。 其他答案很好,但我不太喜欢样板。

那么,让我添加一个,然后:

obj = cars.reduce((c,{make:m,quantity:q})=>({...c,[m]:(c[m]||0)+Number(q)}),{})
output = Object.entries(obj).map(([m,q])=>({make:m,sumQuantity:q.toString()}))

 var cars = [ { make: 'audi', model: 'r8', quantity: '5' }, { make: 'audi', model: 'rs5', quantity: '10'}, { make: 'ford', model: 'mustang', quantity: '3' }, { make: 'kia', model: 'optima', quantity: '9' }, { make: 'audi', model: 'rw7', quantity: '2' }, { make: 'ford', model: 'fusion', quantity: '7' } ] obj = cars.reduce((c,{make:m,quantity:q})=>({...c,[m]:(c[m]||0)+Number(q)}),{}) output = Object.entries(obj).map(([m,q])=>({make:m,sumQuantity:q.toString()})) console.log(output)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM