我写了这个函数,它返回 -1
。
function sayHello() {
let arrayEdificiosNiveis = [11,10,10];
var indexMenor = arrayEdificiosNiveis.indexOf(Math.max(arrayEdificiosNiveis));
console.log(indexMenor);
}
sayHello();
我期望 0,而不是 -1。我该如何解决这个问题?
最佳答案
您需要展开数组以获得最大值。否则你会得到 NaN
作为值(通过字符串数组)并且这不在数组中(并且不可搜索)。
展开数组将所有元素作为函数的参数 (spread syntax ...
)。
在这种情况下它遵循这种方式
Math.max(...[11, 10, 10])
被评估为
Math.max(11, 10, 10)
function sayHello() {
arrayEdificiosNiveis = [11, 10, 10];
var indexMenor = arrayEdificiosNiveis.indexOf(Math.max(...arrayEdificiosNiveis));
console.log(indexMenor);
}
sayHello();
单循环解决方案:
但是为什么不用
v > a[r] ? i : r
(感觉更自然,有点)而不是
v <= a[r] ? r : i
问题是第一次与索引为零的第一个元素进行比较。此时,r = -1
元素是a[r] = undefined
.
与 undefined
的比较和 <
的关系运算符, <=
, >
或 >=
总是 false
这将返回错误的索引 -1
而不是零,并且此结果不会因数组的任何其他元素而改变。
const
getFirstIndexOfMaxValue = array =>
array.reduce((r, v, i, a) => v <= a[r] ? r : i, -1);
console.log(getFirstIndexOfMaxValue([]));
console.log(getFirstIndexOfMaxValue([11]));
console.log(getFirstIndexOfMaxValue([11, 10]));
console.log(getFirstIndexOfMaxValue([11, 10, 10]));
console.log(getFirstIndexOfMaxValue([10, 11, 10]));
console.log(getFirstIndexOfMaxValue([10, 11, 10, 11]));
关于javascript - 如何使用 JavaScript 获取数组中最小值的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677156/