Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中对象的和值_Javascript_Arrays_Object - Fatal编程技术网

Javascript 数组中对象的和值

Javascript 数组中对象的和值,javascript,arrays,object,Javascript,Arrays,Object,尝试对数组中的对象的值求和 我有3个对象,在每个对象中有两个字段,其中我声明了值: let items = [ { id: 1, label: 'test', itemname: 'testitem', pieces: 4, weight: 0.02 }, { id: 2, label: 'test', itemname:

尝试对数组中的对象的值求和

我有3个对象,在每个对象中有两个字段,其中我声明了值:

let items = [
       {
        id: 1, 
        label: 'test', 
        itemname: 'testitem', 
        pieces: 4,
        weight: 0.02
      },
      {
        id: 2, 
        label: 'test', 
        itemname: 'testitem', 
        pieces: 4,
        weight: 0.02
      },
      {
        id: 2, 
        label: 'test', 
        itemname: 'testitem', 
        pieces: 4,
        weight: 0.02
      }
    ];
如果我是对的,重量之和是0.06,碎片之和是12,两者都乘以0.72,这意味着我想把重量之和乘以碎片之和

我看到过这样的例子:

const weight = items.reduce((prev, cur) => {
  return prev + (cur.weight * cur.pieces);
}, 0);
console.log(weight);
在这个例子中,总数只有0.24。 有人能帮我吗


编辑:@Robby Cornelissen的评论是正确的。我的想法是错误的。

您可以使用
forEach
在数组中循环,将
个数
重量
值相加:

let pieces = 0; // sum of pieces
let weight = 0; // sum of weight
items.forEach(function(elmt){
    pieces += elmt.pieces;
    weight += elmt.weight;
});
然后将
个数相乘
*
重量

let total = pieces * weight;
console.log(total);

使用

let items=[{id:1,标签:“test”,itemname:“testitem”,件数:4,重量:.02},{id:2,标签:“test”,itemname:“testitem”,件数:4,重量:.02},{id:2,标签:“test”,itemname:“testitem”,件数:4,重量:.02}];
班级总数{
权重=0;
件数=0;
获取产品(){
返回此.weight*此.pieces;
}
}
const totalObj=项目。减少((上一个,当前)=>{
上一重量+=当前重量;
前件+=当前件;
返回上一个;
},新总数);
控制台日志(totalObj.product)如果您想要所有项目的总(和)重量,您必须先获得每个项目的重量,然后将它们全部相加

const sum = (arr) => {
    return arr.map(item => item.pieces * item.weight).reduce((current, total) => current + total)
}
let项目=[{
id:1,
标签:“测试”,
itemname:'testitem',
作品:4,
重量:0.02
},
{
id:2,
标签:“测试”,
itemname:'testitem',
作品:4,
重量:0.02
},
{
id:2,
标签:“测试”,
itemname:'testitem',
作品:4,
重量:0.02
}
]
常数和=(arr)=>{
返回arr.map(item=>item.pieces*item.weight)。减少((当前,总计)=>current+total)
}
常量总重量=总和(项目)

log(totalWeight)
“[…]因此,如果我是对的,那么重量之和将是0.06,碎片之和将是12的乘积,这将是0.72[…]”你是不对的。代码给出了正确的结果<代码>(a*b)+(c*d)!=(a+c)*(b+d)
但是那些回答这个问题的人提供的代码会得出不正确的结果似乎并不麻烦。这是因为发生这种情况
4*0.02+4*0.02+4*0.02
不是这个
(4+4+4)*(0.02+0.02+0.02)
为什么要将这两个和相乘?这不是你计算总重量的方法。@RobbyCornelissen我的错你是对的,在这种情况下,它应该是0.24,因为它必须首先将第一个项目与件数或更好的数量相加,然后是下一个项目和下一个项目,谢谢你,我想我不应该再整晚熬夜了哈,展示如何得到错误答案的目的是什么?把这些总和相乘是没有意义的。@Barmar你是什么意思?OP写了“我想把重量之和乘以碎片之和”,这正是我的代码所做的。问题是他误解了他试图做的事情的基本数学。将重量之和乘以碎片之和的应用是什么?对于任何有意义的事情,这怎么可能是正确的计算呢?他更新了问题,承认他误解了。OP写道:“如果我是对的,那么重量总和将是0.06,碎片总数将是12。”。OP是正确的:重量之和是0.06,碎片之和是72。我按要求回答了这个问题。在我写下我的答案后,OP会更新问题以更改他们的要求。我不认为OP在我回答了他们的问题后改变了主意是我的错。如果我的答案不再回答编辑过的问题,我很乐意删除它,但我认为批评我的答案不再适用是不对的。如果你们都能停止提供错误结果的答案,那就太好了。