Javascript 创建由每个子数组的最大值组成的数组无法按预期工作
在每个子数组中找到最大的数字,然后将这些最大的数字组成一个数组。Javascript 创建由每个子数组的最大值组成的数组无法按预期工作,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,在每个子数组中找到最大的数字,然后将这些最大的数字组成一个数组。[[4,5,1,3],[13,27,18,26],[32,35,37,39],[10001001857,1] 我写了一些代码,但我不知道它出了什么问题。可能是Array.push()方法不起作用,或者可能是for循环 function largestOfFour(arr) { var main = []; for(k=0;k<arr.length;k++){ var long= 0;
[[4,5,1,3],[13,27,18,26],[32,35,37,39],[10001001857,1]
我写了一些代码,但我不知道它出了什么问题。可能是Array.push()方法不起作用,或者可能是for循环
function largestOfFour(arr) {
var main = [];
for(k=0;k<arr.length;k++){
var long= 0;
for(i=0;i<arr[k].length;i++){
if(arr[k][i]<long) {
arr[k][i] = long;
}
main.push[long];
}
}
return main
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
函数最大四(arr){
var main=[];
对于(k=0;k当您尝试查找每个数组的最大值时,问题在于内循环。在外循环的每次迭代中,您应该重置long=arr[k][0]
。不应重置为0,因为最大值可能小于0。请注意,这要求所有子数组至少有一项
如@edc65所述,long
的声明应出现在函数的开头,以明确long
作为所有局部变量都有一个函数范围
每个子数组只需要一个值。因此,应该为外部循环的每次迭代添加一个值(main.push
应该在外部循环中)。按照当前的方式,每个子数组元素添加一个值
在if语句中,赋值是颠倒的。它应该是
long = arr[k][i];
并且条件也是相反的。long
存储每个子数组的最大值。因此,如果您发现一个值大于它,则更新它:
if(arr[k][i]>long) {
long = arr[k][i];
}
推入数组时,请使用括号,而不是括号:
main.push(long);
括号用于调用方法。括号用于访问对象中的属性
最终代码
根据和答案,这可以进一步简化为呼叫。实现相同结果的可能更简单的方法-简单是可靠性的先决条件
function largestOfFour(arr){
// assumes compatible browser, or shim: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility
// map array each element into new value based on callback's return
return arr.map(function(subarr){
// sort to get highest value at front, and then return it
return subarr.sort(function(a,b){
return b-a;
})[0];
});
}
或使用Math.max(见注释…
我知道这里的问题是在现有代码中找到一个bug,以防您想优化代码
原文是,我只是在这里解释一下
不需要嵌套循环,您可以在单行中实现这一点
var arr=[[4,5,1,3],[13,27,18,26],[32,35,37,39],[10001001857,1];
var result=arr.map(Math.max.apply.bind(Math.max,null));
记录(结果);
console.log(result);
我已经看完了代码,并以其他解决方案结束。第一个for循环遍历大数组,第二个for循环遍历子数组的组件
function largestOfFour(arr) {
var main = [];
for(k=0;k<arr.length;k++){
var long=0;
for(i=0;i<arr[k].length;i++){
if(long<arr[k][i]) {
long=arr[k][i];
}
}
main.push(long);
}
return main;
}
函数最大四(arr){
var main=[];
对于(k=0;kyou需要为每个k循环重置long
…即将var long=0移动到for k循环的顶部请不要更正问题中的代码。我将使用long=arr[k][0]
而不是重置时的long=0
。这将处理数字全部为负数的情况。在for中使用var long…也是一个(小)问题。所有局部变量都在函数范围内,应该在顶部声明。相反,似乎long在for()的内部范围内,这不是。您应该使用Math.max
而不是对数组进行排序(出于效率和不变性的原因)
function largestOfFour(arr){
// assumes compatible browser, or shim: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility
// map array each element into new value based on callback's return
return arr.map(function(subarr){
// sort to get highest value at front, and then return it
return subarr.sort(function(a,b){
return b-a;
})[0];
});
}
function largestOfFour(arr){
// assumes compatible browser, or shim: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility
// map array each element into new value based on callback's return
return arr.map(function(subarr){
// sort to get highest value at front, and then return it
return Math.max.apply(null, subarr);
});
}
function largestOfFour(arr) {
var main = [];
for(k=0;k<arr.length;k++){
var long=0;
for(i=0;i<arr[k].length;i++){
if(long<arr[k][i]) {
long=arr[k][i];
}
}
main.push(long);
}
return main;
}