我对两个函数indexOf和在数组中查找Index之间的区别感到困惑。
文档说
findIndex - 返回数组中第一个元素的索引 谓词为真,否则为-1。
和
indexOf - 返回第一次出现的值的索引 阵列。
答案 0 :(得分:131)
主要区别在于这些功能的参数:
Array.prototype.indexOf()
需要值作为第一个参数。这使得在primitive types数组中找到索引(如字符串,数字或布尔值)是一个不错的选择。
Array.prototype.findIndex()
期望回调作为第一个参数。如果您需要具有非基本类型(例如对象)的数组中的索引,或者您的查找条件比仅仅值更复杂,请使用此选项。
有关这两种情况的示例,请参阅链接。
答案 1 :(得分:9)
如果要查找与谓词匹配的第一个元素,则FindIndex很有用:在W3C的示例中,如果客户的年龄高于或等于18,则存在数字和匹配。
HashMap
控制台:
HashMap
您可以使用Array的indexOf函数找到精确的元素索引,但不能传递谓词。如果要查找特定元素,速度会更快:
var ages = [3, 10, 18, 20];
function checkAdult(age) {
return age >= 18;
}
console.log(ages.findIndex(checkAdult));
返回:
2
索引计数从0开始,因此第一个元素索引为0。
答案 2 :(得分:4)
主要区别在于这些功能的参数:
- > Array.prototype.indexOf():
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");
The result of a will be: 2
- > Array.prototype.findIndex():
var ages = [3, 10, 18, 20];
function checkAdult(age) {
return age >= 18;
}
function myFunction() {
document.getElementById("demo").innerHTML =
ages.findIndex(checkAdult);
}
The result will be: 2
答案 3 :(得分:4)
简单-您使用哪种数组结构?
findIndex()
; indexOf()
。“我想在对象数组中找到索引,键为“ Orange”。
let fruits = [
{ type: "Apple", quantity: 9 },
{ type: "Banana", quantity: 2},
{ type: "Orange", quantity: 8},
{ type: "Pear", quantity: 777}
];
let myIndex = fruits.findIndex(fruit => fruit.type === "Orange"); // Returns 2.
“我想在简单数组中找到索引”。
let fruits = [ "Apple", "Banana", "Pear", "Orange"];
let index = fruits.indexOf("Orange"); // Returns 3.
答案 4 :(得分:2)
您还可以使用includes
:
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
但我更喜欢indexOf
方法:
var vals = [ "foo", "bar", 42, "baz" ];
if (~vals.indexOf( 42 )) {
// found it!
}
答案 5 :(得分:2)
另一个区别是 使用 findIndex() ,用户 可以应用某些功能 ,并在通过测试的数组中查找元素。
但是对于 indexOf() 运算符,情况并非如此。 用户只需检查特定元素是否存在于数组中即可。
答案 6 :(得分:0)
您可以尝试以下代码:-
let city = ['Delhi', 'mumbai']
const a = city.findIndex((item) =>
item.toLowerCase()==='delhi')
console.log(a) // returns 0
let c = city.indexOf('mumbai') // returns 1
console.log(c)
答案 7 :(得分:0)
它们之间的主要区别是:
<块引用>findIndex() 方法得到一个这样的回调函数:
var x = [1,2,3];
x.findIndex(x=> x==3); //returns 2
<块引用>
但是 indexOf 函数只得到一个这样的值:
x.indexOf(3); // returns 2;
<块引用>
如果您尝试将回调传递给 indexOf,则返回 -1;
x.indexOf(x => x==3); //returns -1
<块引用>
如果尝试将值传递给 findIndex 它会返回一个错误:
x.findIndex(3); //Uncaught TypeError: 3 is not a function at Array.findIndex (<anonymous>) at <anonymous>:1:3