복붙노트

[JQUERY] 조건과 일치하는, 어레이 내부의 객체의 인덱스를 얻기

JQUERY

조건과 일치하는, 어레이 내부의 객체의 인덱스를 얻기

해결법


  1. 1.2016, 당신은이에 대한 Array.findIndex (AN ES2015 / ES6 표준)를 사용하는 거 야 :

    2016, 당신은이에 대한 Array.findIndex (AN ES2015 / ES6 표준)를 사용하는 거 야 :

    A = [ {prop1 : "ABC", prop2 : "QWE"}, {prop1 : "bnmb", prop2 : "yutu"}, {prop1 "zxvz"prop2 "qwrq"}]; 인덱스 = a.findIndex (X => === x.prop2 "yutu"); CONSOLE.LOG (인덱스);

    그것은 구글 크롬, 파이어 폭스와 에지에서 지원합니다. 인터넷 익스플로러를 들어, 링크 된 페이지에 polyfill이있다.

    성능 주

    함수 호출은 간단한 루프가 findIndex보다 훨씬 더 수행합니다 정말 큰 배열을 따라서 비싸다 :

    테스트하자 = []; 대해 (ⅰ = 0하자 나는 <1E6은, 난 ++) test.push ({소품 : I}); 검색 = test.length을하자 - 1; 할 수 = 100; console.time ( 'findIndex / 소정 기능'); 검색 FN = OBJ => obj.prop ===하자; 대해 (ⅰ = 0하자 나는 <카운트, 난 ++) test.findIndex (FN); console.timeEnd ( 'findIndex / 미리 함수'); console.time ( 'findIndex / 동적 기능'); 대해 (ⅰ = 0하자 나는 <카운트, 난 ++) test.findIndex (OBJ => === obj.prop 됨); console.timeEnd ( 'findIndex / 동적 기능'); console.time ( '루프'); 대해 (ⅰ = 0하자 나는 <카운트, 난 ++) { {(++ 인덱스; 색인

    대부분의 최적화와 마찬가지로,이주의 적용하고 실제로 필요할 때해야한다.


  2. 2.당신은 할 수없는, 뭔가 (한 번에 적어도) 배열을 반복 할 수 있습니다.

    당신은 할 수없는, 뭔가 (한 번에 적어도) 배열을 반복 할 수 있습니다.

    조건이 많이 변경하는 경우, 당신은이 조건에 일치하는 경우 거기에 볼 수있는 개체에서 통해 루프 모양으로해야합니다. 그러나 ES5있는 시스템에서 (당신은 심 (shim)을 설치하는 경우 나), 반복이 상당히 간결하게 할 수 있습니다 :

    var index;
    yourArray.some(function(entry, i) {
        if (entry.prop2 == "yutu") {
            index = i;
            return true;
        }
    });
    

    즉 당신이 true를 돌려주는 기능까지 배열의 항목을 통해 루프 새로운 (틱) 배열 번호 일부 기능을 사용합니다. 내가 준 기능은 다음 일치하는 항목의 인덱스를 저장하는 반복을 중지 true를 돌려줍니다.

    또는 물론, 단지 루프를 사용합니다. 귀하의 다양한 반복 옵션이 다른 대답에 설명되어 있습니다.

    하지만 당신은 항상이 조회에 동일한 속성을 사용하는 것, 그리고 속성 값이 고유 경우, 당신은 루프를 한 번만하고 매핑하는 객체를 생성 할 수있는 경우 :

    var prop2map = {};
    yourArray.forEach(function(entry) {
        prop2map[entry.prop2] = entry;
    });
    

    (또는 다시, 당신은 루프 또는 다른 옵션 중 하나에 대해 사용할 수 있습니다.)

    당신이 "yutu"prop2 =로 항목을 찾을 필요가 있다면, 당신은이 작업을 수행 할 수 있습니다 :

    var entry = prop2map["yutu"];
    

    나는이 "크로스 색인"배열을 호출합니다. 제거하거나 항목을 추가 (또는 prop2 값을 변경)하면 당연히, 당신은뿐만 아니라 당신의 매핑 개체를 업데이트해야합니다.


  3. 3.TJ 크라우 더는 말,들 비켜은이된다 lodash에 숨겨진 반복의 어떤 종류를해야합니다 :

    TJ 크라우 더는 말,들 비켜은이된다 lodash에 숨겨진 반복의 어떤 종류를해야합니다 :

    var index = _.findIndex(array, {prop2: 'yutu'})
    

  4. 4.

    var CarId = 23;
    
    //x.VehicleId property to match in the object array
    var carIndex = CarsList.map(function (x) { return x.VehicleId; }).indexOf(CarId);
    

    그리고 기본 배열 번호를 당신은 또한이 작업을 수행 할 수 있습니다

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

    당신은 얻을 것이다 -1 배열에 값을 찾을 수없는 경우.


  5. 5.

    var index;
    yourArray.some(function (elem, i) {
        return elem.prop2 === 'yutu' ? (index = i, true) : false;
    });
    

    어레이의 모든 요소를 ​​반복. 이 조건이 일치하지 않는 경우 인덱스 및 true 또는 false를 반환합니다.

    중요 사실의 명시 적 반환 값 (또는 부울 결과가 참 값)입니다. 단일 할당 오류 때문에 결과 만 반복의 휴식을 비활성화하지 않을 0 (부울 (0) === false)를 발생 가능한 인덱스의, 충분하지 않습니다.

    편집하다

    위의 경우에도 짧은 버전 :

    yourArray.some(function (elem, i) {
        return elem.prop2 === 'yutu' && ~(index = i);
    });
    

  6. 6.당신은 다음과 같은 방법으로 Array.prototype.some ()을 (다른 답변에서 언급 한 바와 같이)를 사용할 수 있습니다 :

    당신은 다음과 같은 방법으로 Array.prototype.some ()을 (다른 답변에서 언급 한 바와 같이)를 사용할 수 있습니다 :

    https://jsfiddle.net/h1d69exj/2/

    function findIndexInData(data, property, value) {
        var result = -1;
        data.some(function (item, i) {
            if (item[property] === value) {
                result = i;
                return true;
            }
        });
        return result;
    }
    var data = [{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"}]
    
    
    
    alert(findIndexInData(data, 'prop2', "yutu")); // shows index of 1
    

  7. 7.

    function findIndexByKeyValue(_array, key, value) {
        for (var i = 0; i < _array.length; i++) { 
            if (_array[i][key] == value) {
                return i;
            }
        }
        return -1;
    }
    var a = [
        {prop1:"abc",prop2:"qwe"},
        {prop1:"bnmb",prop2:"yutu"},
        {prop1:"zxvz",prop2:"qwrq"}];
    var index = findIndexByKeyValue(a, 'prop2', 'yutu');
    console.log(index);
    

  8. 8.나는 위의 많은 솔루션을 보았다.

    나는 위의 많은 솔루션을 보았다.

    여기에 배열 객체의 검색 텍스트의 인덱스를 찾기 위해지도 기능을 사용하고 있습니다.

    나는 학생들이 데이터를 사용하여 내 대답을 설명하기 위하여려고하고있다.

    VAR 학생 = [{이름 : "Rambabu", htno : "1245"}, {이름 : "디비", htno : "1246"}, {이름 : "poojitha", htno : "1247"}, {이름 " magitha ", htno :"1248 "}]; VAR studentNameToSearch = "디비"; VAR matchedIndex students.map = (함수 (OBJ) {복귀 obj.name}). 같이 IndexOf (studentNameToSearch); CONSOLE.LOG (matchedIndex); 경고 ( "배열의 검색에서 이름 인덱스는 :"+ matchedIndex)


  9. 9.게오르그 이미 ES6 언급이에 대한 Array.findIndex을 가지고있다. 그리고 다른 답변 사항 Array.some 방법을 사용하여 ES5에 대한 해결된다.

    게오르그 이미 ES6 언급이에 대한 Array.findIndex을 가지고있다. 그리고 다른 답변 사항 Array.some 방법을 사용하여 ES5에 대한 해결된다.

    하나 개 더 우아한 방법이 될 수 있습니다

    var index;
    for(index = yourArray.length; index-- > 0 && yourArray[index].prop2 !== "yutu";);
    

    내가 강조하고자합니다 동시에 사항 Array.some 바이너리 또는 다른 효율적인 검색 기술로 구현 될 수있다. 그래서, 일부 브라우저에서 루프 더 이상 수행 할 수 있습니다.


  10. 10.왜 정확하게 반복 싶지 않아? 새로운 Array.prototype.forEach는이 목적을 위해 중대하다!

    왜 정확하게 반복 싶지 않아? 새로운 Array.prototype.forEach는이 목적을 위해 중대하다!

    당신이 원하는 경우 하나의 메소드 호출을 통해 찾을 수있는 이진 검색 트리를 사용할 수 있습니다. https://github.com/vadimg/js_bintrees - -이 JS에서 BTREE와 레드 블랙 검색 트리의 깔끔한 구현하지만 난 당신이 동시에 인덱스를 찾을 수 있는지 모르겠어요.


  11. 11.Array.reduce ()를 사용하여 한 단계 - 아니 jQuery를

    Array.reduce ()를 사용하여 한 단계 - 아니 jQuery를

    var items = [{id: 331}, {id: 220}, {id: 872}];
    
    var searchIndexForId = 220;
    var index = items.reduce(function(searchIndex, item, index){
      if(item.id === searchIndexForId) { 
        console.log('found!');
        searchIndex = index;
      }
      return searchIndex;
    }, null);
    

    인덱스가 발견되지 않은 경우는 null를 돌려줍니다.


  12. 12.

    var list =  [
                    {prop1:"abc",prop2:"qwe"},
                    {prop1:"bnmb",prop2:"yutu"},
                    {prop1:"zxvz",prop2:"qwrq"}
                ];
    
    var findProp = p => {
        var index = -1;
        $.each(list, (i, o) => {
            if(o.prop2 == p) {
                index = i;
                return false; // break
            }
        });
        return index; // -1 == not found, else == index
    }
    

  13. 13.이 코드를 사용해보십시오

    이 코드를 사용해보십시오

    var x = [{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"}]
    let index = x.findIndex(x => x.prop1 === 'zxvz')
    
  14. from https://stackoverflow.com/questions/15997879/get-the-index-of-the-object-inside-an-array-matching-a-condition by cc-by-sa and MIT license