Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.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_Arrays_Multidimensional Array - Fatal编程技术网

javascript和多维数组

javascript和多维数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有这个多维数组,我需要合并相等的字段并求和 var data = [ [ {field: 123, sum: 100}, {field: 345, sum: 98} ],[ {field: 123, sum: 12}, {field: 345, sum: 20} ] ]; 从这个数组中,我需要一个像这样的新数组 var newArray = [ {field: 123, sum:

我有这个多维数组,我需要合并相等的字段并求和

var data = [
      [
        {field: 123, sum: 100},
        {field: 345, sum: 98}
      ],[
        {field: 123, sum: 12},
        {field: 345, sum: 20}
      ]
    ];
从这个数组中,我需要一个像这样的新数组

var newArray = [
   {field: 123, sum: 112},
   {field: 345, sum: 118}
];
这是我的密码

var newArray = [];
for(var i = 0; i < data.length; i++) {
  for(var j = 0; j < data[i].length; j++) {
    var matched = false;
    for(var c = 0; c < newArray.length; c++) {
      if(data[i][j].field == newArray[c].field) {
        matched = true;
        newArray[c].sum + data[i][j].sum;
      }
    }
    console.log(data[i][j]);
    if(!matched) {
      newArray.push(data[i][j]);
    }
  }
}
var newArray=[];
对于(变量i=0;i
但是我没有得到正确的价值观。
log(newArray)

你的问题就在眼前

newArray[c].sum + data[i][j].sum;
此行执行计算,但不存储在newArray中。如果将运算符更改为+=您的函数将正常工作

newArray[c].sum + data[i][j].sum; // Sums the two values
newArray[c].sum += data[i][j].sum; // Sums and saves them to newArray[c].sum
正确的解决方案如中所示

var newArray=[];
对于(变量i=0;i

循环遍历所有元素,然后在一个名为newArray的新数组中求和。它查看带有字段的对象是否已存在,如果已存在,则将总和添加到现有元素中。如果没有,它将使用字段值和初始和创建一个新元素。

请查看此代码

 <script>
   var data = [
      [
        {field: 123, sum: 100},
        {field: 345, sum: 98}
      ],[
        {field: 123, sum: 12},
        {field: 345, sum: 20}
      ]
    ];


var o=[];
var j=0;


while(j<data.length)
{
    var obj1={};
    var field; sum=0;
    for(i=0; i<data.length; i++)
    {
      field=data[i][j].field;
      sum=sum+data[i][j].sum;
    }
    obj1.field=field;
    obj1.sum=sum;
    o.push(obj1);
    j++;
}

console.log(o)

    </script>

风险值数据=[
[
{字段:123,总和:100},
{字段:345,总和:98}
],[
{字段:123,总和:12},
{字段:345,总和:20}
]
];
var o=[];
var j=0;
而(jECMAScript 6溶液(如果可用):

不过,您的问题只是一个输入错误:

- newArray[c].sum + data[i][j].sum
+ newArray[c].sum += data[i][j].sum

在函数式编程中,这将是一个经典的map-reduce问题,或者更具体地说是一个reduce-by-key问题

如果您正在使用,您可以执行以下操作:

var op = _.chain(data)
 //first put it all in one array
 .flatten()
 //then group by the field
 .groupBy(function(item){return item.field;})
 //then sum up all of the "sum" properties
 .mapObject(function(val,key){
    return _.reduce(val, function(total,sum){
        return total + sum.sum;
    },0);
 })
 //then map it back into our original data structure
 .pairs()
 .map(function(item){
    return {field: item[0], sum: item[1]};
 });

你能告诉我们你被困在哪里吗?你的问题在newArray[c]。sum+data[i][j]。sum;你需要+=来添加,而不仅仅是+。只使用+运算符执行操作,但它不会保存在任何地方。我的错!我已经把代码放在这一行,我缺少的是一个=符号“newArray[c]。sum+data[i][j]。sum;“:(回答很好..但试着等到有人更新代码后再回答..:)否则它会鼓励人们上传问题而不必付出任何努力..谢谢你的回复@Robin,很抱歉没有提供我的代码。我的代码中缺少一个“=”。
- newArray[c].sum + data[i][j].sum
+ newArray[c].sum += data[i][j].sum
var op = _.chain(data)
 //first put it all in one array
 .flatten()
 //then group by the field
 .groupBy(function(item){return item.field;})
 //then sum up all of the "sum" properties
 .mapObject(function(val,key){
    return _.reduce(val, function(total,sum){
        return total + sum.sum;
    },0);
 })
 //then map it back into our original data structure
 .pairs()
 .map(function(item){
    return {field: item[0], sum: item[1]};
 });