0

我有一组类似数组的对象,如下所示:

a = [[1,2],[3,4],[5,6],[7,8]]

我想sum the columns(如果你认为这是一个 4x2 数组)这样:

col1_sum = 16
col2_sum = 20

JS 最好的方法是什么?

我尝试使用underscore's _.reduce这样的功能:

var col1_sum =_.reduce(a, function(memo,obj){ return memo + parseFloat(obj[0]);},0)

但我收到“未定义”错误

有任何想法吗?谢谢你。

4

5 回答 5

3

你总是可以踢它老派。它不漂亮,但它有效。

col1_sum = 0;
col2_sum = 0;
for (var i = 0; i < a.length; ++i) {
    col1_sum += a[i][0];
    col2_sum += a[i][1];
}

我的另一个想法是使用 jQuery 的each功能,但我猜你不是在寻找 jQuery 解决方案?

编辑-谁需要jQuery.each?只需使用 JavaScript 的Array.forEach

var col1_sum = 0;
var col2_sum = 0;

a = [[1,2],[3,4],[5,6],[7,8]];
a.forEach(function(element, index, array) { col1_sum += element[0]; col2_sum += element[1]; });

alert(col1_sum);
alert(col2_sum);
于 2013-07-09T21:05:04.853 回答
3

我从你的下划线减少代码中做了一个简单的 jsfiddle,它似乎工作正常:http: //jsfiddle.net/PdL5P/

var a = [[1,2],[3,4],[5,6],[7,8]]

var col1_sum = _.reduce(a, function(memo,obj){ return memo + parseFloat(obj[0]); }, 0 );

$("#sum").html(col1_sum)

您确定在代码的那个点定义了“a”吗?

于 2013-07-09T21:18:33.933 回答
1

你也可以踢新学校:

var sumColumnJS = function sumColumnJS(array, col) {
    var sum = 0;
    array.forEach(function (value, index, array) {
        sum += value[col];
    });
    return sum;
};

或使用_.each数组迭代器:

sumColumn_ = function sumColumn_(array, col) {
    var sum = 0;
    _.each(a, function (item) {
        sum += item[col];
    });
    return sum;
};

工作演示:http: //jsfiddle.net/HTqvf/

于 2013-07-09T21:11:37.523 回答
0

简单的迭代,就像在任何传统语言中一样

    var col1_sum = 0,col2_sum = 0,行;
    对于(a 中的行)
    {
        col1_sum += a[行][0];
        cos2_sum += a[行][1];
    }
于 2013-07-09T21:13:44.480 回答
-1

我会这样做。

a = [[1,2],[3,4],[5,6],[7,8]]
col1_sum = _.sum(_.map(a,0))
col2_sum = _.sum(_.map(a,1))
于 2016-04-15T16:48:36.680 回答