我有一个嵌套数组,如下所示:
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]]
希望有人可以提供一些方向!谢谢!
答案 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);