如果数组项具有相应的数组值,如何合并?

时间:2014-07-30 08:10:11

标签: javascript jquery arrays

我有一个包含子数组的javascript数组,这些子数组有两个值,一年和一个数字

var abc = [["2012", "399"], 
           ["2012", "114"], 
           ["2012", "151"], 
           ["2013", "116"], 
           ["2013", "145"], 
           ["2013", "280"], 
           ["2013", "84"], 
           ["2014", "5"], 
           ["2014", "228"], 
           ["2014", "156"], 
           ["2014", "43"], 
           ["2014", "27"]];

我想拥有每年第二个值的总和。所以对于我的示例数组,我想要以下输出:

Year: 2012 Sum: 664

Year: 2013 Sum: 625

Year: 2014 Sum: 459

我几乎坚持检查第一个值并将它们添加到数组中。

FIND FIDDLE HERE

有关比较数组中第一个值的任何建议吗?

5 个答案:

答案 0 :(得分:5)

var result = {};
for (var i = 0; i < abc.length; i++) {
    var val = parseInt(abc[i][1], 10);
    var year = abc[i][0];
    if (year in result) {
        result[year] += val;
    } else {
        result[year] = val;
    }
}
for (year in result) {
    console.log('Year: ' + year + ' Sum: ' + result[year]);
}

答案 1 :(得分:2)

循环遍历数组,使用第一个数组元素作为result对象的键,然后相应地添加

var results = {};
abc.forEach(function(data){
   results[data[0]] = results[data[0]] || 0;
   results[data[0]] += +data[1];
});

答案 2 :(得分:2)

不要比较第一个值,将其用作sum数组中的一个键,这样会更容易......

var abc = [["2012", "399"], ["2012", "114"], ["2012", "151"], ["2013", "116"], ["2013", "145"], ["2013", "280"], ["2013", "84"], ["2014", "5"], ["2014", "228"], ["2014", "156"], ["2014", "43"], ["2014", "27"]];

var sum = new Array();

$.each( abc, function( key, value ) {
    //Check if value is the same as others in array?
    if (typeof sum[value[0]] === "undefined") {
        sum[value[0]] = parseInt(value[1]);
    } else {
        sum[value[0]] += parseInt(value[1]);
    }
});

$.each(sum, function(key, val) {
    console.log("Year = " + key + " Sum = " + val);
});

答案 3 :(得分:1)

你可以将它作为一个关键字添加到一个对象中,并将其加在那里。

var years = {'2012': 0, '2013': 0, '2014': 0};
abc.forEach(function (value) {
   years[value[0]] += parseInt(value[1], 10);
});
Object.keys(years).forEach(function (key) {
    console.log('Year:', key, 'Sum:', years[key]);
});

答案 4 :(得分:1)

这将为您提供一系列您想要的对象

var result = [];
$.each( abc, function( key, value ) {
    var matched = false;
    for(var i=0;i<result.length;i++){
        if(value[0]==result[i].year){
            result[i].sum += (+value[1]);
            matched=true;
            continue;
        }
    }
    if(!matched)
        result.push({year:value[0],sum:(+value[1])});
});

console.log(result)