Javascript 当数组项具有相应的数组值时,如何合并它们?
我有一个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"],
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)