Разница между indexOf и функцией findIndex массива


23

Я путаюсь между разницей между двумя функциями indexOf и find Index в массиве.

документация говорит

findIndex - Возвращает индекс первого элемента в массиве, где предикат является истинным, и -1 в противном случае.

и

IndexOf - Возвращает индекс первого вхождения значения в качестве массива.

  0

Я думаю, что разница, один принимает функцию в качестве аргумента (что позволяет более сложные находки, как говорят, что вы искали первое вхождение значения с определенной подстрокой, а не только целое значение), вы просто берете значение, которое ищете. На самом деле это не плохой вопрос. Головокружение без объяснения должно быть неприемлемым. 03 янв. 172017-01-03 12:04:48

  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 (предикат \ [, thisArg \]) *] (http: // ecma-international. орг/ECMA-262/7.0/index.html # втор-array.prototype.findindex). 03 янв. 172017-01-03 12:22:25

  0

Спасибо Tim и RobG 03 янв. 172017-01-03 12:26:12

38

Основное различие являются параметрами этих функций:

  • Array.prototype.indexOf() ожидает значения в качестве первого параметра. Это делает хороший выбор для поиска индекса в массивах примитивных типов.

  • Array.prototype.findIndex() ожидает callback как первый параметр. Используйте это, если вам нужен индекс в массивах с не-примитивными типами (например, объекты), или ваше условие поиска более сложное, чем просто значение.

См. Ссылки на примеры обоих случаев.


6

FindIndex является полезным, если вы хотите, чтобы найти первый элемент, который соответствует вашему сказуемого: В примере W3C, есть номера и соответствует, если возраст клиента выше или равна 18

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

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

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

консоль:

2 

Вы можете найти точный индекс элемента с функцией indexOf от Array, но вы не можете передать предикат. Это быстрее, если вы хотите найти определенный элемент:

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

возвращается:

1 

подсчета индекса начинается с 0, поэтому первый элемент индекса 0.


0

Plese вы можете использовать включает в себя 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 
  0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/18242349) 13 дек. 172017-12-13 14:59:50