값으로 배열 인덱스를 찾는 방법은 무엇입니까?


199

내가 가지고 있다고 말해

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

어느 것이 나에게

[0]100 [1]200 기타

JavaScript에서 값으로 색인을 반환하는 방법이 있습니까?

즉 , 200 의 인덱스를 원하면 1 이 반환 됩니다.



답변:


316

당신은 사용할 수 있습니다 indexOf:

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

배열에서 값을 찾을 수 없으면 -1을 얻습니다.


2
당신이 사용할 수있는 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... 그 문제를 해결하기 위해 또는 자바 스크립트 프레임 워크를.
voigtan

1
IE8에서는 작동하지 않는다는 것을 알았습니다. 내 대안은 무엇입니까?
joedborg

@voigtan JS에 이것을 어떻게 추가합니까?
joedborg

5
고마워요 IE는 언젠가 현대를 따라 잡을 것입니다!
joedborg

호환 모드 인 경우 최근 IE에서도 작동하지 않습니다.
14 분 58 초

74

들어는 배열 객체 를 사용 map하여 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);


최신 브라우저에서는 다음을 사용할 수 있습니다 findIndex.

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

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

console.log(index);

그 ES6의 일부를 지원하는 크롬, FF, 사파리 및 Edge


1
findIndex는 IE 11에서 구현되지 않았습니다.
Bindrid

2
이 응답을 참조로 작성 @Bindrid "ES6의 그것의 부분 크롬, FF, 사파리에서 지원하고 (불행하게도 전용) IE의 가장자리"
Jaqen H'ghar을

17

jQuery의 함수 jQuery.inArray 사용

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

정답으로 표시된 코드를 사용하려고했지만 해당 코드가 모든 버전의 IE에서 작동하지 않는 것 같습니다. 이 답변은 모든 버전의 IE에서 작동하지만 코드를 약간 변경했습니다. var arrayPosition = $ .inArray (value, Array); 완벽하게 작동
James Blackburn

6
jQuery ≠ Javascript
Andrew

13

다음은 자바 스크립트의 복잡한 배열에서 값 인덱스를 찾는 다른 방법입니다. 누군가를 도와주세요. 다음과 같이 JavaScript 배열이 있다고 가정 해 봅시다.

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

이제 배열에서 특정 객체를 선택해야하는 경우 이름이 Tanmay 인 학생의 색인을 찾으려고 가정합니다.

우리는 배열을 반복하고 주어진 키에서 값을 비교함으로써 그렇게 할 수 있습니다.

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

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

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

이 함수를 사용하여 아래와 같이 특정 요소의 색인을 찾을 수 있습니다.

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



6

Array.indexOf일부 Internet Explorer 버전에서는 작동하지 않습니다. 다른 방법이 있지만 여러 가지 방법이 있습니다 ...이 질문 / 답변 참조 : 배열에 JavaScript의 객체가 포함되어 있는지 어떻게 확인합니까?


이 페이지에 따르면 developer.mozilla.org/en-US/docs/JavaScript/Reference/… 이 기능을 사용하려면 Internet Explorer 9가 필요합니다 (여기서는 IE 6과 대화하고 있다고 거의 잘못 가정했습니다)
Simon_Weaver

링크 된 페이지의 @Simon_Weaver는 JavaScript 1.6 이상을 사용하는 모든 브라우저를위한 polyfill이 있습니다
Manse

5

목록이 너무 길지 않으면 이것이 내가 아는 가장 좋은 방법입니다.

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

ES6기능 을 사용할 수 있습니다 Array.prototype.findIndex.

MDN은 말합니다 :

findIndex()메소드는 제공된 테스트 기능 을 만족 하는 배열에서 첫 번째 요소 의 색인을 리턴합니다 . 그렇지 않으면 -1이 반환됩니다.

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

// expected output: 1

객체 속성별로 색인을 찾습니다.

객체 속성별로 색인을 찾으려면

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

예를 들어 다음과 같은 배열이 있습니다.

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

그런 다음 필요한 속성의 인덱스를 찾는 코드는 다음과 같습니다.

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

0

여기에 내 취향이 있습니다. 대부분의 사람들 솔루션은 항목이 있는지 확인하지 않고 존재하지 않으면 임의의 값을 제거하는 것처럼 보입니다.

먼저 요소가 index인지 찾아서 존재하는지 확인하십시오 . 존재하는 경우 접속 방법을 사용하여 색인으로 제거하십시오.

elementPosition = array.indexOf(value);

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

0

다차원 배열에서 .


참조 배열 :

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

사용 filter하여 indexOf:

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]);

다음을 사용하여 배열의 각 항목을 반복합니다 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);

참고 : Includes 함수는 배열의 간단한 인스턴스 메소드이며 항목이 배열에 있는지 쉽게 찾을 수 있도록 도와줍니다 (indexOf와 달리 NaN 포함).


1
색인 / 항목을 얻는 대신, 존재 여부 만 알려주는 것 외에도 호환성에 대해 잘 알고 있어야합니다 (예 : IE 없음) : caniuse.com/#search=includes
moto

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.