JavaScript多维数组元素值和
我有下面的数组,我需要计算每个组的值之和。我可以在数组的dataArr[1]处获取每个组的第一个值的和,但我还需要在dataArr[2]处获取数组中每个组的第二个值的和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 ], [
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