JavaScript多维数组元素值和

JavaScript多维数组元素值和,javascript,arrays,Javascript,Arrays,我有下面的数组,我需要计算每个组的值之和。我可以在数组的dataArr[1]处获取每个组的第一个值的和,但我还需要在dataArr[2]处获取数组中每个组的第二个值的和 var dataArr = [ [ "Group One", 1, 1 ], [ "Group Four", 0, 1 ], [ "Group Three", 0, 1 ], [ "Group Three", 1, 0 ], [

我有下面的数组,我需要计算每个组的值之和。我可以在数组的dataArr[1]处获取每个组的第一个值的和,但我还需要在dataArr[2]处获取数组中每个组的第二个值的和

var dataArr = [    [
    "Group One",
    1,
    1
],
[
    "Group Four",
    0,
    1
],
[
    "Group Three",
    0,
    1
],
[
    "Group Three",
    1,
    0
],
[
    "Group Four",
    0,
    1
],
[
    "Group Two",
    2,
    1
],
[
    "Group Four",
    1,
    0
],
[
    "Group Three",
    0,
    1
],
[
    "Group Three",
    0,
    1
],
[
    "Group One",
    1,
    0
],
[
    "Group Three",
    0,
    1
],
[
    "Group Two",
    1,
    0
]
];
如何计算第二个值的和并生成如下多维数组:

以下是我的代码灵感来源:


此方案使用临时对象作为对结果数组的引用

var dataArr=[[“第一组”,1,1],“第四组”,0,1],“第三组”,0,1],“第四组”,0,1],“第二组”,2,1],“第四组”,1,0],“第三组”,0,1],“第一组”,1,0],“第三组”,0,1],“第二组”,1,0],
结果=功能(数据){
var r=[],o={};
data.forEach(函数(a){
如果(!o[a[0]]){
o[a[0]=[a[0,0,0];
r、 推(o[a[0]]);
}
o[a[0]][1]+=a[1];
o[a[0]][2]+=a[2];
});
返回r;
}(数据阵列);
document.write(“”+JSON.stringify(结果,0,4)+“”)
  • 使用对象而不是数组来跟踪自定义特性
  • 每个键使用一个数组,而不是每个键使用一个值。现在,每个对象可以支持1、2或47个值
  • 如果将来有2个以上的值,我建议使用
    for
    循环来一般地处理它们
  • var dataArr=[[“第一组”,1,1],“第四组”,0,1],“第三组”,0,1],
    [“第三组”,1,0],“第四组”,0,1],“第二组”,2,1],
    [“第四组”,1,0],“第三组”,0,1],“第三组”,0,1],
    [“第一组”,1,0],“第三组”,0,1],“第二组”,1,0];
    var sumByKey={};
    dataArr.forEach(功能(项目){
    变量键=项目[0];
    如果(!sumByKey[key])sumByKey[key]=[];
    对于(var i=0;i和方法:


    使用
    Array.forEach
    Object.keys
    Array.map
    方法解决方案:

    var o = {};
    dataArr.forEach(function(e) {
        var t = o[e[0]];
        if (t) {
            t.first += e[1];
            t.second += e[2];
        } else {
            t = {};
            t.first = e[1];
            t.second = e[2];
            o[e[0]] = t;
        }
    });
    
    console.log(o["Group Four"].first); // first sum for "Group Four"
    console.log(o["Group Four"].second); // second sum for "Group Four"
    
    console.log(o); // all groups with their sums
    
    用对象和方法

    用法:


    为了减少括号中的疯狂,我个人建议保留
    变量。@Phrogz,为了方便起见添加了
    变量
    var keys_obj = {}, key;
    dataArr.forEach(function(v){
        key = v[0];
        if (! (key in keys_obj) ) {
            keys_obj[key] = [v[1], v[2]];
        } else {
            keys_obj[key][0] += v[1];
            keys_obj[key][1] += v[2];
        }
    });
    
    var result = [];
    result = Object.keys(keys_obj).map(function(v){
        return [v, keys_obj[v][0], keys_obj[v][1]];
    });
    
    console.log(result);
    
    // the output: 
    [["Group Four", 1, 2], ["Group Three", 1, 4], ["Group One", 2, 1], ["Group Two", 3, 1]]
    
    var o = {};
    dataArr.forEach(function(e) {
        var t = o[e[0]];
        if (t) {
            t.first += e[1];
            t.second += e[2];
        } else {
            t = {};
            t.first = e[1];
            t.second = e[2];
            o[e[0]] = t;
        }
    });
    
    console.log(o["Group Four"].first); // first sum for "Group Four"
    console.log(o["Group Four"].second); // second sum for "Group Four"
    
    console.log(o); // all groups with their sums