我有不同的对象,其中包含此属性:
{ 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 [对象]
使用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);
看来你需要将b.choosen
转换为字符串中的数字
return a + parseInt(b.choosen,10);
使用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)
当你遍历每个对象时,不需要减少每个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>