javascript - 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 作为索引。
解决方案
你可以这样做:
循环遍历您的矩阵,通过将行传递给函数来找到该行的最小值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));
推荐阅读
- php - Laravel 抛出错误“方案 `javascript` 无效。它应该是 `http` 或 `https`”
- amazon-web-services - Postgres 容器部署到 EBS 但在 ssh 进入 EC2 时未运行
- r - R:绘制具有两个条件的个人百分比条形图
- python - 如何从数据框中随机选取行,直到它们变为特定值,然后显示拾取的行?
- angular - 为什么我在生产中使用 aot 构建失败?
- gradle - Gradle 如何解析 Gradle 插件门户中未列出的插件?
- php - 如何在查询生成器中有效地转换嵌套 SQL
- python - 如何将一个子进程的输出传递给另一个子进程的输入?
- shell - 如何从另一个停止 1 .sh 文件?
- kubernetes - 普罗米修斯发现服务不在目标中