0

我有一个 js 对象 JSON

var s = [  
   {  
      "MONTH":"  2018-01",
      "DEPARTMENT":"Legals",
      "EMPLOYEE":"Smith A.",
      "AMOUNT":"14289.66"
   },
   {  
      "MONTH":"  2018-01",
      "DEPARTMENT":"Legals",
      "EMPLOYEE":"Jonson B.",
      "AMOUNT":"7408.05"
   },
   {  
      "MONTH":"  2018-01",
      "DEPARTMENT":"Legals",
      "EMPLOYEE":"Lee C.",
      "AMOUNT":"10102.98"
   }
]

我想计算 AMOUNT 属性的总和并使用 next 来完成(我使用了来自源代码stackoverflow_count_summ的代码):

s.sum = function(items, prop){
    return items.reduce( function(a, b){
        return a + b[prop];
    }, 0);
};

sTotal = s.sum(s, 'AMOUNT');

但我收到一条错误消息:“TypeError:s.sum 不是函数”

如何通过对象获得“AMOUNT”值的总和?

4

3 回答 3

1

尝试使用此代码:

var s = [  
   {  
      "MONTH":"  2018-01",
      "DEPARTMENT":"Legals",
      "EMPLOYEE":"Smith A.",
      "AMOUNT":"14289.66"
   },
   {  
      "MONTH":"  2018-01",
      "DEPARTMENT":"Legals",
      "EMPLOYEE":"Jonson B.",
      "AMOUNT":"7408.05"
   },
   {  
      "MONTH":"  2018-01",
      "DEPARTMENT":"Legals",
      "EMPLOYEE":"Lee C.",
      "AMOUNT":"10102.98"
   }
];
s.__proto__.sum = function(items, prop){
    return items.reduce( function(a, b){
        return a + +b[prop];
    }, 0);
};

sTotal = s.sum(s, 'AMOUNT');
console.log(sTotal);

我将函数设置为原型并添加类型转换作为回报。我在 Firefox、Chrome 和 Edge 中对其进行了测试,效果很好。

于 2018-08-05T22:45:08.370 回答
0

首先我收到错误消息,因为我的 s 是字符串类型,所以我必须将其转换为数组。

AND 与 proto 一起使用 - 对我有用

s.__proto__.sum = function(items, prop){
    return items.reduce( function(a, b){
        return a + +b[prop];
    }, 0);
};

sTotal = s.sum(s, 'AMOUNT');
console.log(sTotal);

谢谢大家

于 2018-08-06T00:22:15.963 回答
0

我不是在这里确切地告诉您应该如何执行此操作,但我会以与您在此处发布的内容非常相似的格式回答您的问题。您可以简单地解析 AMOUNT 属性中的字符串,并将其转换为浮点数。

s.sum = function(arr) {
  return arr.reduce(function(acc, obj) {
    return acc += parseFloat(obj.AMOUNT);
  }, 0);
}

您可以在此codepen中查看一个工作示例。

于 2018-08-05T22:43:30.420 回答