Lav*_*ios 11 javascript arrays algorithm
找到每个子数组中的最大数字,然后创建这些最大数字的数组.[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 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]], "");
Run Code Online (Sandbox Code Playgroud)
Fer*_*oto 14
当您尝试查找每个数组的最大值时,问题出在内部循环上.在外循环的每次迭代中,您应该重置long = arr[k][0]
.它不应该重置为0,因为最大值可能小于0.请注意,这要求所有子数组至少有一个项目.
正如@ edc65所指出的,声明long
应该在函数的开头发生,以明确表示long
,因为所有局部变量都具有函数作用域.
每个子阵列只需要一个值.因此,您应该为外部循环的每次迭代添加一个值(main.push
应该在外部循环中).目前的方式是,每个子数组元素添加一个值.
在if语句中,您的分配被反转.它应该是
long = arr[k][i];
Run Code Online (Sandbox Code Playgroud)
而且情况也是倒置的.long
存储每个子阵列的最大值.因此,如果找到大于它的值,则更新它:
if(arr[k][i]>long) {
long = arr[k][i];
}
Run Code Online (Sandbox Code Playgroud)
当推入数组时使用括号,而不是括号:
main.push(long);
Run Code Online (Sandbox Code Playgroud)
括号用于调用方法.括号用于访问对象中的属性.
function largestOfFour(arr) {
var main = [];
var long;
for(k=0;k<arr.length;k++){
long = arr[k][0];
for(i=0;i<arr[k].length;i++){
if(arr[k][i]>long) {
long = arr[k][i];
}
}
main.push(long);
}
return main;
}
Run Code Online (Sandbox Code Playgroud)
Math.max
方法您可以使用它Math.max
来简化代码
function largestOfFour(arr) {
var main = [];
for(k=0;k<arr.length;k++){
var long = Math.max.apply(null, arr[k]);
main.push(long);
}
return main;
}
Run Code Online (Sandbox Code Playgroud)
按@ BillyMoon的和@图莎尔的答案,这可以进一步简化为一个Array.map
呼叫.
我知道这里的问题是在现有代码中找到一个错误,以防您想要优化代码
最初的想法是@thefourtheye.我在这里解释一下.
不需要嵌套循环,您可以在单行中实现这一点.
var arr = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var result = arr.map(Math.max.apply.bind(Math.max, null));
document.write(result);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
array.map函数迭代调用它的数组中的每个元素.传递给map
here 的函数是apply
将其this
上下文绑定到绑定的Math.max
第一个参数null
.
Math.max.apply.bind(Math.max, null)
这基本上将Math.max
数组上的函数调用为
Math.max.apply(null, array);
Run Code Online (Sandbox Code Playgroud)
更新:
arr.map(e => Math.max(...e))
Run Code Online (Sandbox Code Playgroud)
var arr = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var result = arr.map(e => Math.max(...e));
document.write(result);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1154 次 |
最近记录: |