给定一个包含子数组的数组,我需要返回一个由最大数量的子数组组成的新数组。
数组:
let arr = [[1,2], [10, 15], [30, 40], [-1, -50]];
新数组应为:
newArr = [2, 40, -1];
我已经解决了它,但它不适用于负数,因为初始值为 0。
如何在 java 中声明一个空的数字变量,例如"int x;"?
let newArr = [0, 0, 0, 0]; // Instead of 0 I need an empty numeric
for (let x = 0; x < arr.length; x++) {
for (let y = 0; y < arr[x].length; y++) {
if (newArr[x] < arr[x][y]) {
newArr[x] = arr[x][y];
}
}
}
console.log(newArr) // 2,15,40,0
预期: 2, 15, 40, -1
你可以拿Math.max
并摊开项目。
let array = [[1,2], [10, 15], [30, 40], [-1, -50]],
max = array.map(a => Math.max(...a));
console.log(max);
您的问题是-1
不小于0
,因此您的数组不会更新,而是以-Infinity
s 而不是0
开始您的newArr
,以便任何数字都会大于它,如下所示:
let arr = [
[1, 2],
[10, 15],
[30, 40],
[-1, -50]
];
let newArr = [];
for (let x = 0; x < arr.length; x++) {
newArr.push(-Infinity); // populate it with `-Infinity`
for (let y = 0; y < arr[x].length; y++) {
if (newArr[x] < arr[x][y]) {
newArr[x] = arr[x][y];
}
}
}
console.log(newArr) // 2,15,40,-1
空数值对使用逻辑也没有帮助,因为您设置了错误的初始值进行比较。看到这个,和你的一样,有小的修复:
let arr = [[1,2], [10, 15], [30, 40], [-1, -50]];
let newArr = [arr[0][0], arr[1][0], arr[2][0], arr[3][0]];
for (let x = 0; x < arr.length; x++) {
for (let y = 0; y < arr[x].length; y++) {
if (newArr[x] < arr[x][y]) {
newArr[x] = arr[x][y];
}
}
}
您可以使用初始值作为第一个元素或子数组。
let arr = [[1,2], [10, 15], [30, 40], [-1, -50]];
newArr = [] // Instead of 0 I need an empty numeric
for (let x = 0; x < arr.length; x++) {
newArr[x] = arr[x][0]
for (let y = 0; y < arr[x].length; y++) {
if (newArr[x] < arr[x][y]) {
newArr[x] = arr[x][y];
}
}
}
console.log(newArr) // 2,15,40,0
或者您可以使用map函数返回最大值。
let arr = [[1,2], [10, 15], [30, 40], [-1, -50]];
let newArr = arr.map(subArr => Math.max(...subArr))
console.log(newArr)