Làm thế nào để tìm chỉ số mảng với một giá trị?


199

Nói rằng tôi đã có cái này

imageList = [100,200,300,400,500];

Cái nào cho tôi

[0]100 [1]200 Vân vân.

Có cách nào trong JavaScript để trả về chỉ mục với giá trị không?

Tức là tôi muốn chỉ số cho 200 , tôi được trả lại 1 .


5
Câu trả lời tuyệt vời tại đây -> stackoverflow.com/questions/237104/ Cách
Manse

Câu trả lời:


316

Bạn có thể sử dụng indexOf:

var imageList = [100,200,300,400,500];
var index = imageList.indexOf(200); // 1

Bạn sẽ nhận được -1 nếu không thể tìm thấy giá trị trong mảng.


2
bạn có thể sử dụng developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ Kẻ hoặc bất kỳ khung Javascript nào để khắc phục điều đó.
voigtan

1
Đã tìm thấy nó sẽ không hoạt động trong IE8. Thay thế của tôi là gì?
joedborg

@voigtan Làm cách nào để thêm phần này vào JS của tôi?
joedborg

5
Tôi đã làm nó, cảm ơn. IE một ngày nào đó sẽ bắt kịp với thời hiện đại!
joedborg

Cũng sẽ không hoạt động trong IE gần đây nếu ở chế độ tương thích
pelms

74

Đối với mảng đối tượng sử dụng mapvới indexOf:

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.map(function (img) { return img.value; }).indexOf(200);

console.log(index);


Trong các trình duyệt hiện đại, bạn có thể sử dụng findIndex:

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.findIndex(img => img.value === 200);

console.log(index);

Nó là một phần của ES6 và được Chrome, FF, Safari và Edge hỗ trợ


1
Lưu ý rằng find Index không được triển khai trong IE 11
Bindrid

2
@Bindrid nó được viết trong câu trả lời, xem "Phần của ES6 và được hỗ trợ bởi Chrome, FF, Safari và (chỉ tiếc là) cạnh IE"
Jaqen H'ghar

17

Sử dụng chức năng của jQuery jQuery.inArray

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )

Sẽ sử dụng mã được đánh dấu là câu trả lời đúng nhưng có vẻ như mã đó không hoạt động trong tất cả các phiên bản IE. Câu trả lời này hoạt động trong tất cả các phiên bản IE nhưng tôi đã thay đổi mã một chút: var ArrayPocation = $ .inArray (value, Array); hoạt động hoàn hảo
James Blackburn

6
jQuery ≠ Javascript
Andrew

13

Đây là một cách khác để tìm chỉ số giá trị trong mảng phức tạp trong javascript. Hy vọng giúp được ai đó thực sự. Giả sử chúng ta có một mảng JavaScript như sau,

var studentsArray =
     [
    {
    "rollnumber": 1,
    "name": "dj",
    "subject": "physics"
   },
   {
   "rollnumber": 2,
  "name": "tanmay",
  "subject": "biology"
   },
  {
   "rollnumber": 3,
   "name": "amit",
   "subject": "chemistry"
   },
  ];

Bây giờ nếu chúng ta có một yêu cầu để chọn một đối tượng cụ thể trong mảng. Chúng ta hãy giả sử rằng chúng ta muốn tìm chỉ số của sinh viên với tên Tanmay.

Chúng ta có thể làm điều đó bằng cách lặp qua mảng và so sánh giá trị tại khóa đã cho.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

    for (var i = 0; i < arraytosearch.length; i++) {

    if (arraytosearch[i][key] == valuetosearch) {
    return i;
    }
    }
    return null;
    }

Bạn có thể sử dụng hàm để tìm chỉ mục của một phần tử cụ thể như dưới đây,

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);


7

làm thế nào về indexOf?

alert(imageList.indexOf(200));

6

Array.indexOfkhông hoạt động trong một số phiên bản của trình duyệt internet explorer - có rất nhiều cách khác để thực hiện mặc dù ... xem câu hỏi / câu trả lời này: Làm cách nào để kiểm tra xem một mảng có bao gồm một đối tượng trong JavaScript không?


theo trang này developer.mozilla.org/en-US/docs/JavaScript/Reference/, bạn cần Internet Explorer 9 cho tính năng này (tôi gần như đã giả định rằng chúng ta chỉ nói về IE 6 ở đây)
Simon_Weaver

@Simon_Weaver trên trang mà bạn đã liên kết có một polyfill cho tất cả các trình duyệt sử dụng JavaScript 1.6 trở lên
Manse

5

Khi danh sách không quá dài, đây là cách tốt nhất tôi biết:

function getIndex(val) {
    for (var i = 0; i < imageList.length; i++) {
        if (imageList[i] === val) {
            return i;
        }
    }
}

var imageList = [100, 200, 300, 400, 500];
var index = getIndex(200);

5

Có thể sử dụng một ES6chức năng Array.prototype.findIndex.

MDN nói :

Các findIndex()phương thức trả về chỉ số của phần tử đầu tiên trong mảng đó đáp ứng các quy định chức năng kiểm tra. Nếu không -1 được trả về.

var fooArray = [5, 10, 15, 20, 25];
console.log(fooArray.findIndex(num=> { return num > 5; }));

// expected output: 1

Tìm một chỉ mục theo thuộc tính đối tượng.

Để tìm một chỉ mục theo thuộc tính đối tượng:

yourArray.findIndex(obj => obj['propertyName'] === yourValue)

Ví dụ, có một mảng như vậy:

let someArray = [
    { property: 'OutDate' },
    { property: 'BeginDate'},
    { property: 'CarNumber' },
    { property: 'FirstName'}
];

Sau đó, mã để tìm một chỉ mục của tài sản cần thiết trông như thế:

let carIndex = someArray.findIndex( filterCarObj=> 
    filterCarObj['property'] === 'CarNumber');

0

Đây là ý kiến ​​của tôi về nó, có vẻ như hầu hết các giải pháp của mọi người không kiểm tra xem mục đó có tồn tại không và nó sẽ loại bỏ các giá trị ngẫu nhiên nếu nó không tồn tại.

Trước tiên hãy kiểm tra xem phần tử có tồn tại hay không bằng cách tìm kiếm chỉ mục của nó . Nếu nó tồn tại, loại bỏ nó bằng chỉ mục của nó bằng phương thức mối nối

elementPosition = array.indexOf(value);

if(elementPosition != -1) {
  array.splice(elementPosition, 1);
}

0

Trong một mảng đa chiều .


Mảng tham chiếu:

var array = [
    { ID: '100', },
    { ID: '200', },
    { ID: '300', },
    { ID: '400', },
    { ID: '500', }
];

Sử dụng filterindexOf:

var in_array = array.filter(function(item) { 
    return item.ID == '200' // look for the item where ID is equal to value
});
var index = array.indexOf(in_array[0]);

Vòng qua từng mục trong mảng bằng cách sử dụng indexOf:

for (var i = 0; i < array.length; i++) {
    var item= array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}

-1
// Instead Of 
var index = arr.indexOf(200)

// Use 
var index = arr.includes(200);

Xin lưu ý : Hàm bao gồm là một phương thức ví dụ đơn giản trên mảng và giúp dễ dàng tìm thấy nếu một mục nằm trong mảng (bao gồm NaN không giống như indexOf)


1
Ngoài ra, điều này chỉ cho bạn biết nếu nó tồn tại, thay vì lấy chỉ mục / mục, hãy nhận thức về tính tương thích (ví dụ không có IE): caniuse.com/#search=includes
moto

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.