在嵌套数组

时间:2018-01-15 20:28:42

标签: javascript arrays nested

我有一个嵌套数组,如下所示:

let scores = [  
[[2, 1, 0], [2, 1, 0]],  
[[4, 2, 0]],  
[[4, 2, 0]],  
[[4, 2, 0],[2, 1, 0]]  
]  

我想要做的是获取每个数组的最高值(并且在包含多个数组的数组中总和最高值,即在第一个数组内,[[2,1,0] ,[2,1,0]],我需要将每个数组的最高值相加,在这种情况下是2 + 2。) 我的想法是shift()每个数组的第一个值或切片()/删除较低的值,所以我的数组看起来像这样:
newScores = [[[2],[2]], [4], [4], [[4],[2]]]

最终,我想要的输出是:output = [[4], [4], [4], [6]]

希望有人可以提供一些方向!谢谢!

4 个答案:

答案 0 :(得分:1)

您需要迭代父数组,然后对其中的每个数组进行迭代 - 遍历其数组,从每个数组中获取最大数量 - 然后对子数组求和,最后将总数推入输出数组。



let scores = [  
[[2, 1, 0], [2, 1, 0]],  
[[4, 2, 0]],  
[[4, 2, 0]],  
[[4, 2, 0],[2, 1, 0]]  
]

var output = [];
scores.forEach(function(score) {
  var total = 0
  score.forEach(function(arr) {
    total += arr.reduce(function(a, b) { return Math.max(a, b); }); 
  })
  output.push(total);
})

console.log(output); // gives [4,4,4,6]




答案 1 :(得分:1)

 const result = scores.map(groups =>
     groups.map((sum, group) => sum + Math.max(...group), 0)
 );

答案 2 :(得分:1)

您可以使用map()reduce()Math.max方法以及展开语法...执行此操作。

let scores = [  
  [[2, 1, 0], [2, 1, 0]],  
  [[4, 2, 0]],  
  [[4, 2, 0]],  
  [[4, 2, 0],[2, 1, 0]]  
]  

const result = scores.map(a => a.reduce((r, e) => {
  return +r + Math.max(...e)
}, []))

console.log(result)

答案 3 :(得分:1)

let scores = [  
[[2, 1, 0], [2, 1, 0]],  
[[4, 2, 0]],  
[[4, 2, 0]],  
[[4, 2, 0],[2, 1, 0]]  
]

function nestedArray(arr){
   let result=[];
   let counter = 0;
   for(let i=0;i<arr.length;i++){
       if(arr[i].length>1){
           var a = [Math.max(...arr[i][counter])];
           var b = [Math.max(...arr[i][counter+1])];
        result.push(a.map((ax,bx)=>ax+b[bx]));
       }
       if(arr[i].length===1){
            result.push([Math.max(...arr[i][counter])]);

       }


   }
   return result;

}
nestedArray(scores);