我有一个包含子数组的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
我几乎坚持检查第一个值并将它们添加到数组中。
有关比较数组中第一个值的任何建议吗?
答案 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)