0

在 C# 中,我们有一个.Sum(Predicate)方法可以让您使用 lambda 表达式对对象集合进行求和。例如,如果我有以下一组对象(为简单起见使用 JSON)

[
  {
    "Id": 1,
    "Sub": {
      "Size": 1
    }
  },
  {
    "Id": 2,
    "Sub": {
      "Size": 3
    }
  }
]

我想得到尺寸的总和,我可以做到Sum(n => n.Sub.Size)

有没有办法在javascript中做这样的事情?我对这门语言真的很陌生(而且很弱),并且在执行类似的功能时遇到了麻烦。我正在使用 jQuery,所以我也愿意打开任何东西。

4

3 回答 3

3
var result = arr.reduce(function(a, b) {
    return a + b.Sub.Size;
}, 0);

演示:http: //jsfiddle.net/sUCTK/

文档:MDN

于 2013-01-01T23:28:23.970 回答
0

在 JavaScript 中,您需要手动单步执行数组并将值相加:

var sum = 0;
for (var i in a) {
  sum += a[i].Sub.Size
}
// sum now contains the total
于 2013-01-01T23:27:33.837 回答
0

为了跨浏览器的兼容性,您可以这样做:

var sum = function(arr, callback, initial_value) {
    if (arguments.length < 3) {
        initial_value = 0;
    }
    var ret = initial_value;

    for (var i = 0; i < arr.length; i++) {
        ret += callback(arr[i]);
    }        

    return ret;    
};

console.log(sum(arr, function(element) {
    return element.Sub.Size;
});

这也可以让您通过传递适当的类型来对其他可求和对象(如字符串)求和initial_value

@zerkms 展示了如何使用新的 ECMAScript 标准来更好地总结事物。

于 2013-01-01T23:29:09.240 回答