Ope*_*uwa 2 javascript arrays logic
如果它是数组的第一个 (arr[0])或最后一个索引 (arr[arr.length-1]),该函数只返回最大的数。如何修复逻辑错误?
function isGreater(arr) {
let a = arr[0];
for (let i = 0; i < arr.length; i++) {
var isGreat = (a < arr[i]) ? arr[i] : a;
}
return isGreat;
}
console.log(isGreater([7, 9, 10000, 11, 25, 20]));
// output=> 20, expected output 10000
console.log(isGreater([7, 11, 25, 2]));
// output=> 7, expected output 25Run Code Online (Sandbox Code Playgroud)
逻辑错误是,你要么分配arr[i]或a到isGreat,但从来没有比较isGreat来arr[i]。
只是重用a而不是使用isGreat:
function isGreater(arr) {
let a = arr[0];
for (let i = 1; i < arr.length; i++) {
a = a < arr[i] ? arr[i] : a;
}
return a;
}
console.log(isGreater([7, 9, 10000, 11, 25, 20]));
console.log(isGreater([7, 11, 25, 2]));Run Code Online (Sandbox Code Playgroud)
请注意,我更新了它以跳过循环中的第一个索引,因为a已经包含该值。
这一行:
a = a < arr[i] ? arr[i] : a;
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以是这样的:
if (a < arr[i]) {
a = arr[i];
}
Run Code Online (Sandbox Code Playgroud)
我认为这是一个练习。如果没有,您可以像这样更直接地获得结果:
// ES2015+
function isGreater(arr) {
return Math.max(...arr);
}
Run Code Online (Sandbox Code Playgroud)
或这个:
// ES5 and earlier
function isGreater(arr) {
return Math.max.apply(Math, arr);
}
Run Code Online (Sandbox Code Playgroud)