首页 > 解决方案 > Javascript:当元素存在于数组中时,为什么 indexOf 函数返回 -1?

问题描述

我创建了一个矩阵,如:

u = Array.from({ length: 100}, (v, i) => []);
console.log(u)

然后,在运行代码并填充矩阵之后。我想获取特定行中最小元素的索引。所以结果应该是 0 或 1。

act[i] = u.indexOf(Math.min.apply(null,u[i]));

但是,我有时会得到-1。我读到负数意味着数组中不存在该元素。就我而言,它始终存在。

检查它是否存在我使用console.log()并且它确实存在但由于某种原因它仍然返回 -1 作为索引。

标签: javascriptarraysminindexofnegative-number

解决方案


你可以这样做:

循环遍历您的矩阵,通过将行传递给函数来找到该行的最小值Math.min()- 使用扩展语法 const min_val = Math.min(...u[row]);(将数组项“解包”到函数参数中)。将此最小值放入您的act数组中,act[row] = min_val;或者将此最小值的索引放入您的数组中act[row] = u[row].indexOf(min_val);(或者您可以两者都做)。

如果您不需要所有最小值/索引(并且只需要按需给定的行),您可以使用底部的函数。

const ROWS = 100;
const COLS = 5;

const u = Array.from({ length: ROWS}, (v, i) => []);

//let's fill the Matrix:
for (let row = 0; row < u.length; row++){
  for (let col = 0; col < COLS; col++){
    u[row].push(Math.random());
  }  
}

console.log(u)

//Create an array of all min values/indexes:
const act = Array(u.length);

for (let row = 0; row < u.length; row++){
  const min_val = Math.min(...u[row]);
  //put min value in:
  //act[row] = min_val;
  
  //or put min value index in:
  act[row] = u[row].indexOf(min_val);
  
  //or you could do both:
  //act[row] = [ min_val, u[row].indexOf(min_val) ];
}

console.log(act)

//if you just want to get any min index of any row on the fly use this function:
function getMinIndexAtRow(inputArr, row){
  const min_val = Math.min(...inputArr[row]);
  return u[row].indexOf(min_val);
}

//use it like this:
console.log(getMinIndexAtRow(u, 0));


推荐阅读