JavaScript:数组中的最大值
JavaScript: greatest value in an array
函数只返回最大数,如果它在 first (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 25
逻辑错误是您将 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]));
请注意,我更新了它以跳过循环中的第一个索引,因为 a
已经包含该值。
这一行:
a = a < arr[i] ? arr[i] : a;
如果您愿意,可以是这个:
if (a < arr[i]) {
a = arr[i];
}
我认为这是一个练习。如果没有,您可以像这样更直接地获得结果:
// ES2015+
function isGreater(arr) {
return Math.max(...arr);
}
或者这个:
// ES5 and earlier
function isGreater(arr) {
return Math.max.apply(Math, arr);
}
需要将数组的第一个值取为实际最大值,从下标1
开始循环。不需要 a
,数组的另一个引用。
在循环内部检查 isGreat
是否小于实际值并更新 isGreat
.
检查防止赋值新旧最大值的多余赋值。
function isGreater(arr) {
let isGreat = arr[0];
for (let i = 1; i < arr.length; i++) {
if (isGreat < arr[i]) {
isGreat = arr[i];
}
}
return isGreat;
}
console.log(isGreater([7, 9, 10000, 11, 25, 20])); // 10000
console.log(isGreater([7, 11, 25, 2])); // 25
你应该这样做:
function fun(){
let arr = [7, 9, 10000, 11, 25, 20];
let a = arr[0];
for (let i = 0; i < arr.length; i++) {
a = (a < arr[i]) ? arr[i] : a;
}
return a; //Returns 10000
}
首先,您在循环内定义了 isGreat
,因此每次迭代都会重新定义它。试试这个:
function isGreater(arr){
let greatest = arr[0];
for(let i = 0; i < arr.length; i++){
if(arr[i] > greatest){
greatest = arr[i];
}
}
return greatest;
}
console.log(isGreater([0, 4, 6, 1, 3]))
当您找到最大值时,您应该尝试将当前值与 当前最大值 进行比较,这样最大值会在迭代过程中发生变化。
这就是例子
function isGreater(arr) {
let greatest = arr[0];
for (let i = 1; i < arr.length; i++) {
greatest = greatest < arr[i] ? arr[i] : greatest;
}
return greatest;
}
尽管您可能已经有了更好的答案,但我是这样做的:
const isGreater = arr => {
return arr.sort((a, b) => b - a)[0];
};
这只是按降序对数组进行排序,returns 新排序的数组的第一个元素。
函数只返回最大数,如果它在 first (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 25
逻辑错误是您将 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]));
请注意,我更新了它以跳过循环中的第一个索引,因为 a
已经包含该值。
这一行:
a = a < arr[i] ? arr[i] : a;
如果您愿意,可以是这个:
if (a < arr[i]) {
a = arr[i];
}
我认为这是一个练习。如果没有,您可以像这样更直接地获得结果:
// ES2015+
function isGreater(arr) {
return Math.max(...arr);
}
或者这个:
// ES5 and earlier
function isGreater(arr) {
return Math.max.apply(Math, arr);
}
需要将数组的第一个值取为实际最大值,从下标1
开始循环。不需要 a
,数组的另一个引用。
在循环内部检查 isGreat
是否小于实际值并更新 isGreat
.
检查防止赋值新旧最大值的多余赋值。
function isGreater(arr) {
let isGreat = arr[0];
for (let i = 1; i < arr.length; i++) {
if (isGreat < arr[i]) {
isGreat = arr[i];
}
}
return isGreat;
}
console.log(isGreater([7, 9, 10000, 11, 25, 20])); // 10000
console.log(isGreater([7, 11, 25, 2])); // 25
你应该这样做:
function fun(){
let arr = [7, 9, 10000, 11, 25, 20];
let a = arr[0];
for (let i = 0; i < arr.length; i++) {
a = (a < arr[i]) ? arr[i] : a;
}
return a; //Returns 10000
}
首先,您在循环内定义了 isGreat
,因此每次迭代都会重新定义它。试试这个:
function isGreater(arr){
let greatest = arr[0];
for(let i = 0; i < arr.length; i++){
if(arr[i] > greatest){
greatest = arr[i];
}
}
return greatest;
}
console.log(isGreater([0, 4, 6, 1, 3]))
当您找到最大值时,您应该尝试将当前值与 当前最大值 进行比较,这样最大值会在迭代过程中发生变化。
这就是例子
function isGreater(arr) {
let greatest = arr[0];
for (let i = 1; i < arr.length; i++) {
greatest = greatest < arr[i] ? arr[i] : greatest;
}
return greatest;
}
尽管您可能已经有了更好的答案,但我是这样做的:
const isGreater = arr => {
return arr.sort((a, b) => b - a)[0];
};
这只是按降序对数组进行排序,returns 新排序的数组的第一个元素。