数组的indexOf和findIndex函数之间的区别

时间:2017-01-03 11:57:50

标签: javascript

我对两个函数indexOf和在数组中查找Index之间的区别感到困惑。

文档说

  

findIndex - 返回数组中第一个元素的索引   谓词为真,否则为-1。

  

indexOf - 返回第一次出现的值的索引   阵列。

8 个答案:

答案 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