无法求和对象的属性

问题描述 投票:1回答:4

我有不同的对象,其中包含此属性:

{ products: [{ choosen: "1" }] }
{ products: [{ choosen: "2" }] }
{ products: [{ choosen: "3" }] }

我想要财产choosen,所以在这种情况下,目标应该是:6。

我做了什么:

var total= 0;

$.each(objects, function(i, obj){
    total+= obj.products.reduce(function(a, b){
        return a + b.choosen;
   });
});

console.log(total);

这个回报:0 [对象]

javascript
4个回答
1
投票

使用Array#reduce和destructuring。还将字符串转换为数字。

const data = [{ products: [{ choosen: "1" }] },
{ products: [{ choosen: "2" }] },
{ products: [{ choosen: "3" }] }]

const res = data.reduce((a,{products})=>{
  return a+products.reduce((a2,{choosen})=>a2+Number(choosen), 0);
}, 0);

console.log(res);

替代方案:

const data = [{ products: [{ choosen: "1" }] },
{ products: [{ choosen: "2" }] },
{ products: [{ choosen: "3" }] }]

const res = data
.map(({products})=>products)
.flat()
.reduce((a,{choosen})=>{
  return a+Number(choosen);
}, 0);

console.log(res);

1
投票

看来你需要将b.choosen转换为字符串中的数字

return a + parseInt(b.choosen,10);

0
投票

使用forEach循环

var a = [{ products: [{ choosen: "1" }] },
{ products: [{ choosen: "2" }] },
{ products: [{ choosen: "3" }] }]

var sum=0;
a.forEach((e)=>{
sum+=Number(e.products[0].choosen)
})
console.log(sum)

0
投票

当你遍历每个对象时,不需要减少每个obj,因为每个obj不是一个数组。直接你可以添加它们。

这里选择的数据类型是字符串,因此使用parseInt将其转换为int。

我希望这能解决问题

var objects = [{
    products: [{
      choosen: "1"
    }]
  },
  {
    products: [{
      choosen: "2"
    }]
  },
  {
    products: [{
      choosen: "3"
    }]
  },
]

var total = 0;

$.each(objects, function(i, obj) {
  total += parseInt(obj.products[0].choosen)
});

console.log(total);

// alternative if the choosen property changes of index

var alternativeTotal = 0;

$.each(objects, function(i, obj) {
  alternativeTotal += obj.products.reduce(function(a, b){
  return a + parseInt(b.choosen)
},0)
})

console.log(alternativeTotal)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.