[英]How to get the largest number of each array?
挑战在于给出这样一个子数组的数组:
[[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]
对于此示例,预期结果应为[27, 5, 39, 1001]
。
它要我返回每个数组的最大数。 我尝试了以下解决方案。 如果有人告诉它有什么问题,我将不胜感激。
function largestOfFour(arr) {
const result = [];
for(let i = 0; i < arr.length; i++){
for(let a = 0; a < arr[i].length; a ++){
var highestNumber = 0;
if(arr[i][a] > highestNumber){
highestNumber = arr[i][a];
}
}
result.push(highestNumber)
highestNumber = 0;
}
return result
}
提前致谢!
您的代码中的问题是您在内循环中初始化highestNumber
的地方。 这意味着您的最大值会为内部数组中的每个元素重置。
您应该在内部循环之外初始化它。
如果要处理负值,还应将highestNumber
初始化为可能的最低负值,而不是0
。
function largestOfFour(arr) { const result = []; for(let i = 0; i < arr.length; i++){ var highestNumber = Number.MIN_SAFE_INTEGER; // <-- initialize here to lowest possible value for(let a = 0; a < arr[i].length; a ++){ // var highestNumber = 0; // <-- move this up if(arr[i][a] > highestNumber){ highestNumber = arr[i][a]; } } result.push(highestNumber) highestNumber = 0; } return result } let arrays = [ [17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10] ]; console.log(largestOfFour(arrays))
代码较少的解决方案是使用Math.max
来节省您的输入:
let arrays = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]; let result = arrays.map(arr => Math.max(...arr)); console.log(result); // [27, 5, 39, 1001]
您可以使用map
来实现:
let array = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
let max_elements = array.map(el => Math.max(...el));
这是可行的,因为您正在展开Math.max
function 中的每个子数组,这将找到其所有参数的最大值
var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]] console.log(largestOfFour(arr)); function largestOfFour(arr) { const result = []; for(let i = 0; i < arr.length; i++){ var highestNumber = 0; for(let a = 0; a < arr[i].length; a ++){ if(arr[i][a] > highestNumber){ highestNumber = arr[i][a]; } } result.push(highestNumber) highestNumber = 0; } return result }
这应该在第二个 for 循环之外。
var highestNumber = 0;
或者.. 你可以通过使用 Math.max 和 map 每个元素来做简单的方法
let arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]; let result = arr.map(eachInnerArr => Math.max(...eachInnerArr)); console.log(result)
您的代码不起作用的原因是因为highestNumber
在循环内。 因此在每次迭代中,通过将 0 分配给它来丢弃先前的值,因此您应该将highestNumber
变量移到循环之外
arr=[[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]] var highestNumber = 0; function largestOfFour(arr) { const result = []; for(let i = 0; i < arr.length; i++){ for(let a = 0; a < arr[i].length; a ++){ if(arr[i][a] > highestNumber){ highestNumber = arr[i][a]; } } result.push(highestNumber) highestNumber = 0; } return result } console.log(largestOfFour(arr))
或者,有一种更简单、更容易的方法可以使用Math.max
来做同样的事情
let array = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]; let mxel = array.map(el => Math.max(...el)); console.log(mxel)
var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var result = [];
for (var i=0; i < arr.length; i++){
result.push(Math.max(...arr[i]));
}
console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.