我有包含此属性的其他对象:
{ 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 [object Object]
答案 0 :(得分:1)
似乎您需要将b.choosen
转换为字符串中的数字
return a + parseInt(b.choosen,10);
答案 1 :(得分:1)
使用Array#reduce和解构。还要将字符串转换为数字。
DELIMITER $$
USE `solocloud_dev_2`$$
DROP TRIGGER IF EXISTS table_10_summary_after_insert $$
CREATE TRIGGER table_10_summary_after_insert AFTER INSERT ON table_10
FOR EACH ROW BEGIN
DECLARE var INT;
SET var=0;
SELECT COUNT(*) FROM table_10_summary WHERE client_id = new.client_id;
IF var > 0
THEN
UPDATE table_10_summary SET records = records+1 WHERE client_id = new.client_id;
ELSE
INSERT INTO table_10_summary (new.client_id,1);
END$$
DELIMITER$$
替代:
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);
答案 2 :(得分: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)
答案 3 :(得分: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>