所以可以说我有以下数组。
[{idProduct:1, unitCost:400},
{idProduct:1, unitCost:160},
{idProduct:1, unitCost:46},
{idProduct:2, unitCost:200},
{idProduct:2, unitCost:40}
我似乎无法找到添加产品1单位成本,然后切断以添加产品2的其他单位成本的方法,依此类推...我实际上想将其附加到Google电子表格的另一行中但是我首先要计算它。
我尝试了一些for / if循环,但最终总会得出所有产品的总成本,而不仅仅是单个产品。
此用于给出所有ID的总费用。当我在其中放置if时,我不确定如何比较两个id,如果我想重设总和,我应该将totalCost设置回0
for (var a = 0; a < arr.length ; a++) {
totalCost= totalCost+ arr[a].unitCost;
}
我尝试了一个if休息,但似乎也没有用,想尝试诺言,但我不确定那会有所帮助。我还尝试设置另一个,以便将下一个ID与当前所在的IM进行比较,但这似乎使事情变得复杂,而且我得到的数字是错误的。
我也尝试过
for (var a = 0; a < arr.length ; a++) {
if(arr[a].idProduct === arr[a+1].idProduct){
totalCost= totalCost+ arr[a].unitCost;
}
}
但是,当然,在最后一个id上,由于a + 1的长度大于数组的长度,因此它会将其与未定义的内容进行比较。
我现在真的为此感到筋疲力尽,并且非常确定这是一个简单的解决方案,但是我真的不知道该怎么办
答案 0 :(得分:2)
您可以使用reduce
来总结数组,并使用idProduct
作为键将值添加到对象中。使用Object.values
将对象转换为数组。
let arr = [{"idProduct":1,"unitCost":400},{"idProduct":1,"unitCost":160},{"idProduct":1,"unitCost":46},{"idProduct":2,"unitCost":200},{"idProduct":2,"unitCost":40}]
let result = Object.values(arr.reduce((c, {idProduct,unitCost}) => {
c[idProduct] = c[idProduct] || {idProduct,unitCost: 0};
c[idProduct].unitCost += unitCost;
return c;
}, {}));
console.log( result );
或者您可以将idProduct
用作键,将sum和用作值,例如:
let arr = [{"idProduct":1,"unitCost":400},{"idProduct":1,"unitCost":160},{"idProduct":1,"unitCost":46},{"idProduct":2,"unitCost":200},{"idProduct":2,"unitCost":40}]
let result = arr.reduce((c, {idProduct,unitCost}) => {
c[idProduct] = c[idProduct] || 0;
c[idProduct] += unitCost;
return c;
}, {});
console.log(result);
答案 1 :(得分:0)
您可以像下面那样使用.forEach()
。此代码将e.unitCost
添加到具有相同idProduct
var input = [{
idProduct: 1,
unitCost: 400
},
{
idProduct: 1,
unitCost: 160
},
{
idProduct: 1,
unitCost: 46
},
{
idProduct: 2,
unitCost: 200
},
{
idProduct: 2,
unitCost: 40
}
];
var output = { };
input.forEach(e => output[e.idProduct] = (output[e.idProduct] || 0) + e.unitCost);
console.log(output);
答案 2 :(得分:0)
let pro;
let unitcost=[];
for (var a = 0; a < arr.length ; a++) {
if(pro==arr[a].idProduct){
unitcost[unitcost.length-1]+=arr[a].unitCost;
}
else{
pro=arr[a].idProduct;
unitcost.push(pro);
unitcost.push(arr[a].unitCost);
}
}
console.log(unitcost);