Javascript 当数组项具有相应的数组值时,如何合并它们?

Javascript 当数组项具有相应的数组值时,如何合并它们?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个javascript数组,它有子数组,这些子数组有两个值,一年和一个数字 var abc = [["2012", "399"], ["2012", "114"], ["2012", "151"], ["2013", "116"], ["2013", "145"], ["2013", "280"], ["2013", "84"],

我有一个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
我一直在检查第一个值并将它们添加到数组中


对比较我数组中的第一个值有什么建议吗?

您可以将它添加到一个对象中,以年份作为键,然后在那里求和

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]);
});

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

var results = {};
abc.forEach(function(data){
   results[data[0]] = results[data[0]] || 0;
   results[data[0]] += +data[1];
});
var result={};
对于(变量i=0;i
不要比较第一个值,将其用作求和数组中的键,这样会更容易

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);
});

这将为您提供所需的对象数组

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)
var结果=[];
美元。每个(abc,功能(键,值){
var匹配=假;

对于(var i=0;i您希望这3年的具体数据还是通用数据?
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)