无法求和对象的属性

时间:2019-02-12 15:19:31

标签: javascript

我有包含此属性的其他对象:

{ 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]

4 个答案:

答案 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>