[JQUERY] 어떻게 배열의 요소의 모든 항목의 인덱스를 찾는 방법은?
JQUERY어떻게 배열의 요소의 모든 항목의 인덱스를 찾는 방법은?
해결법
-
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.또 다른 해결책은 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.Array.prototype.map ()와 Array.prototype.filter ()를 사용하여 또 다른 방법 :
Array.prototype.map ()와 Array.prototype.filter ()를 사용하여 또 다른 방법 :
var indices = array.map((e, i) => e === value ? i : '').filter(String)
-
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.당신은지도와 필터 모두를 사용하여이에 대한 간단한 읽을 수있는 솔루션을 작성할 수 있습니다 :
당신은지도와 필터 모두를 사용하여이에 대한 간단한 읽을 수있는 솔루션을 작성할 수 있습니다 :
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.주 : 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.나는 또 다른 쉬운 방법으로 업데이트 할.
나는 또 다른 쉬운 방법으로 업데이트 할.
또한 foreach는 방법을 사용할 수 있습니다.
var Cars = ["Nano", "Volvo", "BMW", "Nano", "VW", "Nano"]; var result = []; Cars.forEach((car, index) => car === 'Nano' ? result.push(index) : null)
-
8.
const indexes = cars .map((car, i) => car === "Nano" ? i : null) .filter(i => i !== null)
-
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.그냥 다른 방법을 공유 할 수, 당신은 결과뿐만 아니라 달성하기 위해 함수 발생기를 사용할 수 있습니다 :
그냥 다른 방법을 공유 할 수, 당신은 결과뿐만 아니라 달성하기 위해 함수 발생기를 사용할 수 있습니다 :
findAllIndexOf 함수 (목표 바늘) { 창 [] .concat ((함수 * () { 경우 (나는
-
11.
["a", "b", "a", "b"] .map((val, index) => ({ val, index })) .filter(({val, index}) => val === "a") .map(({val, index}) => index) => [0, 2]
-
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.당신은 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.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')) )
from https://stackoverflow.com/questions/20798477/how-to-find-index-of-all-occurrences-of-element-in-array by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 정지는 GIF 애니메이션 온로드, 마우스 오버에 활성화를 시작합니다 (0) | 2020.10.15 |
---|---|
[JQUERY] 하나 개의 어레이에 병합이 JSON / 자바 스크립트 배열 (0) | 2020.10.15 |
[JQUERY] 부모 자식 상대적으로 요소의 인덱스를 가져옵니다 (0) | 2020.10.15 |
[JQUERY] jQuery를이되지 않는 동기 XMLHttpRequest의가 (0) | 2020.10.14 |
[JQUERY] 이벤트 사용자가 스크롤을 중지 (0) | 2020.10.14 |