Sự khác biệt giữa hàm indexOf và hàm findIndex của mảng


23

Tôi bị nhầm lẫn giữa sự khác biệt giữa hai hàm indexOf và tìm Index trong một mảng.

Các tài liệu nói

findIndex - Trả về chỉ số của phần tử đầu tiên trong mảng nơi vị là đúng, và -1 khác.

indexOf - Trả về chỉ số của sự xuất hiện đầu tiên của một giá trị trong một mảng .

  0

Tôi nghĩ rằng sự khác biệt là, một mất một chức năng như một cuộc tranh cãi (cho phép phát hiện phức tạp hơn, như nói rằng bạn đang tìm kiếm sự xuất hiện đầu tiên của một giá trị với một chuỗi cụ thể thay vì chỉ các toàn bộ giá trị), chỉ cần lấy giá trị bạn đang tìm kiếm. Nó thực sự không phải là một câu hỏi tồi. Downvotes mà không cần giải thích nên được xuống-votable. 03 jan. 172017-01-03 12:04:48

  0

Đôi khi tốt nhất là bắt đầu với đặc tả ngôn ngữ (ví dụ ECMA-262) và điền vào các khoảng trống với các tài liệu khác: [* Array.prototype.indexOf (searchElement \ [, fromIndex \]) *] (http: // ecma- international.org/ecma-262/7.0/index.html#sec-array.prototype.indexof) vs [* Array.prototype.findIndex (vị ngữ \ [, thisArg \]) *] (http: // ecma-international. org/ecma-262/7.0/index.html # sec-array.prototype.findindex). 03 jan. 172017-01-03 12:22:25

  0

Cảm ơn Tim và RobG 03 jan. 172017-01-03 12:26:12

38

Sự khác biệt chính là các thông số của các chức năng này:

  • Array.prototype.indexOf() hy vọng một giá trị như tham số đầu tiên. Điều này làm cho nó trở thành một lựa chọn tốt để tìm chỉ mục trong mảng các kiểu nguyên thủy.

  • Array.prototype.findIndex() hy vọng một callback như tham số đầu tiên. Sử dụng điều này nếu bạn cần chỉ mục trong mảng với các loại không nguyên thủy (ví dụ: đối tượng) hoặc điều kiện tìm kiếm của bạn phức tạp hơn chỉ là một giá trị.

Xem liên kết để biết ví dụ về cả hai trường hợp.


6

FindIndex rất hữu ích, nếu bạn muốn tìm các yếu tố đầu tiên phù hợp với vị ngữ của bạn: Trong ví dụ của W3C có một số lượng và phù hợp nếu tuổi của khách hàng trên hoặc tương đương với 18.

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

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

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

console:

2 

Bạn có thể tìm thấy chỉ mục phần tử chính xác với hàm indexOf của Array, nhưng bạn không thể chuyển vị từ. Nó là nhanh hơn nếu bạn muốn tìm một yếu tố cụ thể:

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

lợi nhuận:

1 

Index đếm bắt đầu từ 0, vì vậy chỉ số yếu tố đầu tiên là 0.


0

Plese bạn có thể sử dụng bao gồm 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

Sự khác biệt chính là các thông số của các chức năng:

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

Điều này không cung cấp câu trả lời cho câu hỏi. Khi bạn có đủ [danh tiếng] (https://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bất kỳ bài đăng nào] (https://stackoverflow.com/help/privileges/comment); thay vào đó, [cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-thay thế). - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18242349) 13 dec. 172017-12-13 14:59:50