복붙노트

[JQUERY] 어떻게 배열의 요소의 모든 항목의 인덱스를 찾는 방법은?

JQUERY

어떻게 배열의 요소의 모든 항목의 인덱스를 찾는 방법은?

해결법


  1. 1..indexOf () 메소드를 사용하면 특정 값의 모든 인스턴스를 찾기 위해 루프를 호출 할 수 있도록 지정 인덱스에서 검색을 시작하는 것을 선택적인 두 번째 매개 변수가 있습니다 :

    .indexOf () 메소드를 사용하면 특정 값의 모든 인스턴스를 찾기 위해 루프를 호출 할 수 있도록 지정 인덱스에서 검색을 시작하는 것을 선택적인 두 번째 매개 변수가 있습니다 :

    function getAllIndexes(arr, val) {
        var indexes = [], i = -1;
        while ((i = arr.indexOf(val, i+1)) != -1){
            indexes.push(i);
        }
        return indexes;
    }
    
    var indexes = getAllIndexes(Cars, "Nano");
    

    당신은 정말 내 기능의 배열로 반환해야합니다 (또는 반환 빈 배열 값을 찾을 수없는 경우), 그래서 당신은 인덱스를 사용하는 방법을 명확하게하지 않는,하지만 당신은 각각의 인덱스 값과 다른 뭔가를 할 수 내부 루프.

    UPDATE :만큼 비전의 의견에 따라, 루프에 대한 간단한보다 효율적으로 수행 동일한 작업을 얻을 것, 그리고 그것을 이해하기 쉽고 유지하는 것이 더 쉽다 :

    function getAllIndexes(arr, val) {
        var indexes = [], i;
        for(i = 0; i < arr.length; i++)
            if (arr[i] === val)
                indexes.push(i);
        return indexes;
    }
    

  2. 2.또 다른 해결책은 Array.prototype.reduce ()를 사용하는 것입니다 :

    또 다른 해결책은 Array.prototype.reduce ()를 사용하는 것입니다 :

    ["Nano","Volvo","BMW","Nano","VW","Nano"].reduce(function(a, e, i) {
        if (e === 'Nano')
            a.push(i);
        return a;
    }, []);   // [0, 3, 5]
    

    필요한 경우 방법 및 사용 polyfill을 줄이기 위해 N.B는 브라우저 호환성을 확인 .:.


  3. 3.Array.prototype.map ()와 Array.prototype.filter ()를 사용하여 또 다른 방법 :

    Array.prototype.map ()와 Array.prototype.filter ()를 사용하여 또 다른 방법 :

    var indices = array.map((e, i) => e === value ? i : '').filter(String)
    

  4. 4.ES6 스타일로 더 간단한 방법.

    ES6 스타일로 더 간단한 방법.

    const indexOfAll = (arr, val) => arr.reduce((acc, el, i) => (el === val ? [...acc, i] : acc), []);
    
    
    //Examples:
    var cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"];
    indexOfAll(cars, "Nano"); //[0, 3, 5]
    indexOfAll([1, 2, 3, 1, 2, 3], 1); // [0,3]
    indexOfAll([1, 2, 3], 4); // []
    

  5. 5.당신은지도와 필터 모두를 사용하여이에 대한 간단한 읽을 수있는 솔루션을 작성할 수 있습니다 :

    당신은지도와 필터 모두를 사용하여이에 대한 간단한 읽을 수있는 솔루션을 작성할 수 있습니다 :

    const nanoIndexes = Cars
      .map((car, i) => car === 'Nano' ? i : -1)
      .filter(index => index !== -1);
    

    편집 : 당신이 IE / 에지를 지원 할 필요가 없습니다 (또는 코드를 transpiling하는) 경우, ES2019은 간단한 한 줄에서이 작업을 수행 할 수 있습니다 우리 flatMap을했다 :

    const nanoIndexes = Cars.flatMap((car, i) => car === 'Nano' ? i : []);
    

  6. 6.주 : MDN은 while 루프를 사용하는 방법을 제공한다 :

    주 : MDN은 while 루프를 사용하는 방법을 제공한다 :

    var indices = [];
    var array = ['a', 'b', 'a', 'c', 'a', 'd'];
    var element = 'a';
    var idx = array.indexOf(element);
    while (idx != -1) {
      indices.push(idx);
      idx = array.indexOf(element, idx + 1);
    }
    

    나는 그것이 더 나은 다른 답변보다 더 말할하지 않을 것입니다. 그냥 재미.


  7. 7.나는 또 다른 쉬운 방법으로 업데이트 할.

    나는 또 다른 쉬운 방법으로 업데이트 할.

    또한 foreach는 방법을 사용할 수 있습니다.

    var Cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"];
    
    var result = [];
    
    Cars.forEach((car, index) => car === 'Nano' ? result.push(index) : null)
    

  8. 8.

    const indexes = cars
        .map((car, i) => car === "Nano" ? i : null)
        .filter(i => i !== null)
    

  9. 9.이것은 나를 위해 일한 :

    이것은 나를 위해 일한 :

    let array1 = [5, 12, 8, 130, 44, 12, 45, 12, 56];
    let numToFind = 12
    let indexesOf12 = [] // the number whose occurrence in the array we want to find
    
    array1.forEach(function(elem, index, array) {
        if (elem === numToFind) {indexesOf12.push(index)}
        return indexesOf12
    })
    
    console.log(indexesOf12) // outputs [1, 5, 7]
    

  10. 10.그냥 다른 방법을 공유 할 수, 당신은 결과뿐만 아니라 달성하기 위해 함수 발생기를 사용할 수 있습니다 :

    그냥 다른 방법을 공유 할 수, 당신은 결과뿐만 아니라 달성하기 위해 함수 발생기를 사용할 수 있습니다 :

    findAllIndexOf 함수 (목표 바늘) { 창 [] .concat ((함수 * () { 경우 (나는


  11. 11.

    ["a", "b", "a", "b"]
       .map((val, index) => ({ val, index }))
       .filter(({val, index}) => val === "a")
       .map(({val, index}) => index)
    
    => [0, 2]
    

  12. 12.우리는 스택 및 푸시 "내가"스택에 때마다 우리는 "[내가] == 값을 편곡"상태가 발생을 사용할 수 있습니다

    우리는 스택 및 푸시 "내가"스택에 때마다 우리는 "[내가] == 값을 편곡"상태가 발생을 사용할 수 있습니다

    이 옵션을 선택합니다 :

    static void getindex(int arr[], int value)
    {
        Stack<Integer>st= new Stack<Integer>();
        int n= arr.length;
        for(int i=n-1; i>=0 ;i--)
        {
            if(arr[i]==value)
            {
                st.push(i);
            }
        }   
        while(!st.isEmpty())
        {
            System.out.println(st.peek()+" ");
            st.pop(); 
        }
    }
    

  13. 13.당신은 Polyfill을 사용할 수 있습니다

    당신은 Polyfill을 사용할 수 있습니다

    if (!Array.prototype.filterIndex) {
    Array.prototype.filterIndex = function (func, thisArg) {
    
        'use strict';
        if (!((typeof func === 'Function' || typeof func === 'function') && this))
            throw new TypeError();
    
        let len = this.length >>> 0,
            res = new Array(len), // preallocate array
            t = this, c = 0, i = -1;
    
        let kValue;
        if (thisArg === undefined) {
            while (++i !== len) {
                // checks to see if the key was set
                if (i in this) {
                    kValue = t[i]; // in case t is changed in callback
                    if (func(t[i], i, t)) {
                        res[c++] = i;
                    }
                }
            }
        }
        else {
            while (++i !== len) {
                // checks to see if the key was set
                if (i in this) {
                    kValue = t[i];
                    if (func.call(thisArg, t[i], i, t)) {
                        res[c++] = i;
                    }
                }
            }
        }
    
        res.length = c; // shrink down array to proper size
        return res;
    };
    

    }

    이처럼 사용

    [2,23,1,2,3,4,52,2].filterIndex(element => element === 2)
    
    result: [0, 3, 7]
    

  14. 14.findIndex 콜백 출력과 일치하는 첫 번째 인덱스를 검색한다. 그런 다음 새로운 구조로 배열을 캐스팅, 배열을 확장하여 자신의 findIndexes을 구현할 수 있습니다.

    findIndex 콜백 출력과 일치하는 첫 번째 인덱스를 검색한다. 그런 다음 새로운 구조로 배열을 캐스팅, 배열을 확장하여 자신의 findIndexes을 구현할 수 있습니다.

    클래스 EnhancedArray는 배열을 {확장 findIndexes (단) { this.reduce 리턴 (? => (여기서, (E, I) I) (A, 예를 a.concat (Ⅰ) : A), []); } } / * ---- 간단한 데이터 구조 (배열 번호)와 협력 --- * / // 기존 배열 myArray의하자 = [1, 3, 5, 5, 4, 5]; // 캐스팅 : 새로운 EnhancedArray에서 myArray = (...에서 myArray); //운영 CONSOLE.LOG ( myArray.findIndexes ((E) => === 예 5) ) / * ---- 복잡한 상품 구조의 배열 작업 - * / 도착하자 = [{이름 : '아메드'}, {이름 : '라미'}, {이름 : 'Abdennour'}]; 도착 새로운 EnhancedArray = (... 도착); CONSOLE.LOG ( arr.findIndexes ((O) => o.name.startsWith ( 'A')) )

  15. from https://stackoverflow.com/questions/20798477/how-to-find-index-of-all-occurrences-of-element-in-array by cc-by-sa and MIT license