在列表的列表中查找元素和最大的列表



这是我的代码,是否有一种可能的方法来获得元素的最高和,我所知道的是求和一个2d数组。但我想要的是获取相加后值最大的元素检查代码

const sumof2dArray = (arr) => {
let newArr = []
for(let i = 0; i < arr.length;i++){
let sum = 0
console.log(arr[i])
for(let j = 0; j < arr[i].length;j++){

sum = sum + arr[i][j] 

}
newArr.push(sum)
console.log(sum)
}
let max = newArr[0]
for(let i of newArr){
if(i > max){
max = i
}
}
return max
}
sumof2dArray([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]])

我的输出是:44

但是我想要的是元素的预期输出应该是:[1,3,40]

使用两个变量,一个保存最高的和,另一个保存包含该和的数组。然后循环遍历2D数组,当一行的和大于最大值时更新这些变量。

const sumof2dArray = (arr) => {
let maxRow = arr[0];
let maxSum = sumOfArray(maxRow);

for (let i = 1; i < arr.length; i++) {
let newSum = sumOfArray(arr[i]);
if (newSum > maxSum) {
maxRow = arr[i];
maxSum = newSum;
}
}

return maxRow;
function sumOfArray(arr) {
let sum = 0;
for (let j = 0; j < arr.length; j++) {
sum = sum + arr[j]
}
return sum;
}
}
console.log(sumof2dArray([
[1, 2, 3],
[4, 5, 6],
[10, 11, 12],
[7, 8, 9],
[1, 3, 40]
]))

可以遍历所有子数组。使用两个子变量,一个用于存储和最大的子数组,另一个用于存储和最大的子数组的位置

const highestSumElement = (arr) => {
if (!arr || arr.length == 0) {
return []
}

let maxSum = 0
let maxIndex = -1

arr.forEach((item, idx) => {
let sum = arr[idx].reduce((a, b) => a + b)
if (sum > maxSum) {
maxSum = sum
maxIndex = idx

}

})
return arr[maxIndex]
}
console.log(highestSumElement([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]]))

这是使用Array#reduce的另一个方法。

const sum = arr => arr.reduce((a, b) => a + b, 0);
const sumof2dArray = arr => arr.reduce((acc, curr) => sum(curr) > sum(acc) ? curr : acc);
console.log(sumof2dArray([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]]));

你可以使用以下几个答案:

我认为第一个更直观,只是在跟踪最大数组的同时跟踪最大和。

第二个只是使用reduce内部的reduce来缩小到最高的数组。

在子数组中有负值的情况下,将max初始化为-infinity是有帮助的。例如,如果它们都是负数,那么您将永远找不到任何求和数组的值高于初始最大值。这样还可以在数组的开头开始循环,而不必单独处理第一个元素。

每个示例只需要对每个子数组求和一次。

const arr = [
[1, 2, 3],
[4, 5, 6],
[10, 11, 12],
[7, 8, 9],
[1, 3, 40],
];
const sumof2dArray = (arr) => {
let res;
let max = -Infinity;
for (a of arr) {
const sum = a.reduce((a, b) => a + b, 0);
if (sum > max) {
max = sum;
res = a;
}
}
return res;
};
sumof2dArray(arr);
const sumof2dArray2 = (arr) =>
arr.reduce(
(prev, curr) => {
sum = curr.reduce((a, b) => a + b, 0);
return sum > prev[1] ? [curr, sum] : prev;
},
[[], -Infinity]
)[0];
sumof2dArray2(arr);

44来自于你写

console.log(sum)

但是你没有对函数的返回值做任何事情。如果您希望它输出返回值,只需替换

sumof2dArray([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]])

console.log(sumof2dArray([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]]))