Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中由其他值分组的特定值之和_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 数组中由其他值分组的特定值之和

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[5]索引处,我有一个值,表示数组$arr中每个对象的出现次数:

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