Javascript 数组中由其他值分组的特定值之和
我有一个数组结构,在$arr[5]索引处,我有一个值,表示数组$arr中每个对象的出现次数:Javascript 数组中由其他值分组的特定值之和,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个数组结构,在$arr[5]索引处,我有一个值,表示数组$arr中每个对象的出现次数: $arr=[ [ "some_value", "some_value", "cluster_0", "area_2", "some_value", "1" ], [ "some_value",
$arr=[
[
"some_value",
"some_value",
"cluster_0",
"area_2",
"some_value",
"1"
],
[
"some_value",
"some_value",
"cluster_0",
"area_2",
"some_value",
"2"
],
[
"some_value",
"some_value",
"cluster_0",
"area_3",
"some_value",
"1"
],
[
"some_value",
"some_value",
"cluster_1",
"area_3",
"some_value",
"3"
],
[
"some_value",
"some_value",
"cluster_1",
"area_4",
"some_value",
"2"
],
[
"some_value",
"some_value",
"cluster_1",
"area_4",
"some_value",
"2"
]
];
我试图得到的是将这些$arr[5]值相加,这些值由集群的$arr[2]和区域的$arr[3]组成
这是预期的输出
正如你所看到的,根据面积和簇匹配,我得到了特定值的总和。javascript中有没有好的方法来执行这种操作?我考虑了一个简单的for循环,在循环内部,一个if条件,用于求和共享相同$arr[2]集群和$arr[3]区域值的值。您可以获取组和值索引的索引,并使用组作为散列键生成一个新的结果集。然后将值添加到组中 函数groupByarray、组、值{ var结果=[], hash=Object.createnull; array.foreacha函数{ var keys=groups.mapfunction i{返回[i]}, 键=键。连接“|”; if!散列[键]{ hash[key]=keys.concat0; result.pushhash[key]; } hash[key][hash[key].长度-1]+=+a[value]; }; 返回结果; } var数组=[[some_value,some_value,cluster_0,area_2,some_value,cluster_0,area_2,some_value,2],[some_value,some_value,cluster_0,area_3,some_value,1],[some_value,some_value,cluster_1,area_3,some_value,2],[some_值,some_值,cluster_1,area_4,some_值,2]], 结果=groupByarray[2,3],5; console.logresult;
.作为控制台包装{max height:100%!important;top:0;}也考虑此解决方案
var data = $arr.reduce(function(acc, item) {
var clusterName = item[2],
areaName = item[3];
acc[clusterName] = acc[clusterName] || {};
acc[clusterName][areaName] = acc[clusterName][areaName] || 0;
acc[clusterName][areaName] += parseInt(item[5]);
return acc;
}, {});
console.log(data);
var array = Object.keys(data).reduce(function(acc, clusterItem) {
Object.keys(data[clusterItem]).forEach(function(areaItem) {
var item = [];
item.push(clusterItem);
item.push(areaItem);
item.push(data[clusterItem][areaItem]);
acc.push(item);
});
return acc;
}, []);
console.log(array);
在这里,第一步计算所有项并将其添加到对象中。第二步将对象转换为所需的结构数组
var data = $arr.reduce(function(acc, item) {
var clusterName = item[2],
areaName = item[3];
acc[clusterName] = acc[clusterName] || {};
acc[clusterName][areaName] = acc[clusterName][areaName] || 0;
acc[clusterName][areaName] += parseInt(item[5]);
return acc;
}, {});
console.log(data);
var array = Object.keys(data).reduce(function(acc, clusterItem) {
Object.keys(data[clusterItem]).forEach(function(areaItem) {
var item = [];
item.push(clusterItem);
item.push(areaItem);
item.push(data[clusterItem][areaItem]);
acc.push(item);
});
return acc;
}, []);
console.log(array);