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


23

我对两个函数indexOf和数组中的索引之间的区别感到困惑。

文档说

findIndex - 返回阵列,其中 谓词是真实的第一个元素的索引,并且否则返回-1。

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

  0

我觉得不同的是,一个带一个函数作为一个参数(启用更先进的发现,就像说你正在寻找一个特定的子值的第一次出现,而不仅仅是整体价值),只需要你想要的价值。这其实并不是一个坏问题。没有解释的降级应该是可以投票的。 03 1月. 17

  0

有时最好从语言规范开始(即ECMA-262),并用其他材料填补空白:[* Array.prototype.indexOf(searchElement \ [,fromIndex \])*](http:// ecma- international.org/ecma-262/7.0/index.html#sec-array.prototype.indexof)vs [* Array.prototype.findIndex(predicate \ [,thisArg \])*](http:// ecma-international。组织/ ECMA-262/7.0/index.html中#仲丁基array.prototype.findindex)。 03 1月. 17

  0

感谢Tim和RobG 03 1月. 17

38

的主要区别是这些函数的参数:

  • Array.prototype.indexOf()期望一个作为第一参数。这使它成为在基本类型数组中找到索引的好选择。

  • Array.prototype.findIndex()预计回调作为第一个参数。如果您需要非基元类型的数组(例如对象)中的索引,或者您的查找条件不仅仅是一个值而且更复杂,请使用它。

查看这两种情况的例子的链接。


6

FindIndex是有用的,如果你想找到适合你的谓词的第一个元素:在W3C的例子有号,如果顾客的年龄高于或等于18

var ages = [3, 10, 18, 20]; 

function checkAdult(age) { 
    return age >= 18; 
} 

console.log(ages.findIndex(checkAdult)); 

控制台相匹配:

2 

您可以使用Array的indexOf函数找到一个确切的元素索引,但不能传递谓词。这是更快,如果你想找到一个特定的元素:

var ages = [3, 10, 18, 20]; 
console.log(ages.indexOf(10)); 

回报:

1 

指数计数从0开始的,所以第一个元素索引为0


0

普莱舍,你可以使用包括preffer indexOf

[1, 2, 3].includes(2);  // true 
[1, 2, 3].includes(4);  // false 
[1, 2, 3].includes(3, 3); // false 


var vals = [ "foo", "bar", 42, "baz" ]; 
if (~vals.indexOf(42)) { 
// found it! 
} 

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