javascript - 如何使用 JavaScript 获取数组中最小值的索引?

标签 javascript arrays min

我写了这个函数,它返回 -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/

相关文章:

c - 如何对C中输出的正确名称排序列表进行排序?

c++ - std::min_element 返回意外结果

javascript - 如何获取多选列表框的值(按单击顺序)?

javascript - 下拉表单 Javascript 创建一系列数字

javascript - 如何在指令中调用函数

java - Java 一次 for 循环

Javascript 编辑 SVG

c# - 使用 Array.CopyTo 复制元素是否正确,还是应该始终使用 for 循环?

sql-server - 获取几列之间的最小值

python - 为什么 python max ('a' , 5) 返回字符串值?