首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >"TypeError: s.sum不是函数“尝试计算javascript对象的sum属性值

"TypeError: s.sum不是函数“尝试计算javascript对象的sum属性值
EN

Stack Overflow用户
提问于 2018-08-06 06:19:10
回答 3查看 883关注 0票数 0

我有一个js对象JSON

代码语言:javascript
复制
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中的代码):

代码语言:javascript
复制
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”值的总和?

EN

回答 3

Stack Overflow用户

发布于 2018-08-06 06:45:08

尝试使用以下代码:

代码语言:javascript
复制
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);

我将函数设置为proto,并添加类型转换作为返回。我在Firefox、Chrome和Edge上测试了它,它工作正常。

票数 1
EN

Stack Overflow用户

发布于 2018-08-06 06:43:30

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

代码语言:javascript
复制
s.sum = function(arr) {
  return arr.reduce(function(acc, obj) {
    return acc += parseFloat(obj.AMOUNT);
  }, 0);
}

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

票数 0
EN

Stack Overflow用户

发布于 2018-08-06 08:22:16

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

并为我提供原件的函数

代码语言:javascript
复制
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);

谢谢你们大家

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51698661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档