[JQUERY] 여러 자바 스크립트 배열과 일치 찾기
JQUERY여러 자바 스크립트 배열과 일치 찾기
해결법
-
1.
var result = arrays.shift().filter(function(v) { return arrays.every(function(a) { return a.indexOf(v) !== -1; }); });
데모:
-
2.배열 우리가 교차하는 간단한 단일 라이너 방법이 될 수를 찾으려는 사람들의 배열이되어 가정
배열 우리가 교차하는 간단한 단일 라이너 방법이 될 수를 찾으려는 사람들의 배열이되어 가정
VAR 도착 = [0,1,2,3,4,5,6,7,8,9], [0,2,4,6,8], [4,5,6,7], INT arr.reduce = ((p, c) => p.filter (E => c.includes (E))); document.write를 ( "<사전>"+ JSON.stringify (INT) + " 사전>");
-
3.이제, 당신이 질문에 배열의 불확정 번호를 추가 한 것으로, 여기에 객체로 각 항목의 수를 수집 한 후 최대 수를 가지고있는 항목을 대조 또 다른 방법입니다.
이제, 당신이 질문에 배열의 불확정 번호를 추가 한 것으로, 여기에 객체로 각 항목의 수를 수집 한 후 최대 수를 가지고있는 항목을 대조 또 다른 방법입니다.
이 방법의 장점 :
그리고 여기 코드는 :
function containsAll(/* pass all arrays here */) { var output = []; var cntObj = {}; var array, item, cnt; // for each array passed as an argument to the function for (var i = 0; i < arguments.length; i++) { array = arguments[i]; // for each element in the array for (var j = 0; j < array.length; j++) { item = "-" + array[j]; cnt = cntObj[item] || 0; // if cnt is exactly the number of previous arrays, // then increment by one so we count only one per array if (cnt == i) { cntObj[item] = cnt + 1; } } } // now collect all results that are in all arrays for (item in cntObj) { if (cntObj.hasOwnProperty(item) && cntObj[item] === arguments.length) { output.push(item.substring(1)); } } return(output); }
근무 데모 : http://jsfiddle.net/jfriend00/52mAP/
참고로,이 ES5을 필요로하지 않습니다 너무 심없이 모든 브라우저에서 작동합니다.
http://jsperf.com/in-all-arrays : 긴 각 1000 15 개 어레이의 성능 테스트에서이없는 내가이 jsperf에서의 대답입니다보다 10 배 빠른 오전에 사용되는 검색 방법보다했다.
여기 DUP-해제 및 카운트를 추적하는 ES6지도 및 설정을 사용하는 버전입니다. 이 데이터의 유형이 보존되고 객체가 동일하게 가지고 있지, 동일한 객체를 되 비교하지만 그것도 자연 문자열 변환을 할 필요가 없습니다 (아무것도 할 수있다, 데이터도 객체가 될 수 있다는 장점이있다 속성 / 값).
VAR 배열 = [ [ 'valueOf', 'toString', '사과', '오렌지', '바나나', '바나나', '배', '물고기', '팬케이크', '타코', '피자', 1, 2, 999 888], [ 'valueOf', 'toString', '타코', '물고기', '물고기', '사과', '피자', 1, 999, 777, 999, 1, [ 'valueOf', 'toString', '바나나', '피자', '물고기', '사과', '사과', 1, 2, 999, 666, 555] ]; 업데이트 탄소 나노 튜브를위한 // 서브 클래스 클래스 MapCnt지도를 {확장 생성자 (반복 가능) { 슈퍼 (반복 가능); } CNT (반복 가능) { // 고유 한 배열에서 확인 항목을 (반복 가능)를 세트 = 새로운 설정을 할; // 이제 세트의 각 항목에 대한 CNT를 업데이트 에 대한 {(세트의 항목을하자) CNT = 썩 (항목)을 할 수 || 0; ++ CNT; (항목, CNT) this.set; } } } containsAll 나 함수 (allArrays ...) { cntObj = 새로운 MapCnt ()를 보자; (allArrays 배열) {대 cntObj.cnt (배열); } // 이제 전체 탄소 나노 튜브를 얼마나 많은 항목 참조 출력하도록 = []; (VAR [아이템 CNT] cntObj.entries ()의)에 대한 { 경우 (CNT === allArrays.length) { output.push (항목); } } (출력)를 반환; } VAR 결과 containsAll.apply (이, 배열) =; 이 document.body.innerHTML = "<사전> [로
을"+ result.join ( '에서
')를 + "로
] 사전>"; -
4.당신이 짧은 배열의 단지 항목을 비교할 수 있습니다 thoughts- 부부, 리턴 된 배열의 중복을 방지 할 수있다.
당신이 짧은 배열의 단지 항목을 비교할 수 있습니다 thoughts- 부부, 리턴 된 배열의 중복을 방지 할 수있다.
function arraysInCommon(arrays){ var i, common, L= arrays.length, min= Infinity; while(L){ if(arrays[--L].length<min){ min= arrays[L].length; i= L; } } common= arrays.splice(i, 1)[0]; return common.filter(function(itm, indx){ if(common.indexOf(itm)== indx){ return arrays.every(function(arr){ return arr.indexOf(itm)!= -1; }); } }); } var arr1= ['apple', 'orange', 'banana', 'pear', 'fish', 'pancake', 'taco', 'pizza']; var arr2= ['taco', 'fish', 'apple', 'pizza', 'apple','apple']; var arr3= ['banana', 'pizza', 'fish', 'apple','fish']; var allArrays = [arr1,arr2,arr3]; arraysInCommon(allArrays).sort();
반환 값 : 사과, 생선, 피자
DEMO - http://jsfiddle.net/kMcud/
-
5.배열의 배열되어 있다고 가정하고, 모든 배열을 통해 확인 :
배열의 배열되어 있다고 가정하고, 모든 배열을 통해 확인 :
DEMO : http://jsfiddle.net/qUQHW/
var tmp = {}; for (i = 0; i < data.length; i++) { for (j = 0; j < data[i].length; j++) { if (!tmp[data[i][j]]) { tmp[data[i][j]] = 0; } tmp[data[i][j]]++; } } var results = $.map(tmp, function(val,key) { return val == data.length ? key :null; })
-
6.여기에 한 줄 솔루션을 간다. 두 사고 단계로 분할 할 수 있습니다 :
여기에 한 줄 솔루션을 간다. 두 사고 단계로 분할 할 수 있습니다 :
대기 = 1,2,3,4,5]; VAR arrB = [4,5,10]; VAR 내부 arrA.filter = 가입 (엘 => arrB.includes (엘)); CONSOLE.LOG (의`사거리 : $ {}`내부 조인);
VAR 배열 = [ [ '사과', '오렌지', '바나나', '배', '물고기', '팬케이크', '타코', '피자'], [ '타코', '물고기', '사과', '피자'], [ '바나나', '피자', '물고기', '사과'] ]; VAR은 = arrays.reduce가 가입 ((가입 전류) => join.filter (EL => current.includes (EL))); CONSOLE.LOG는 (`사거리는 $ {가입}`);
-
7.이 배열의 수를 작동합니다 :
이 배열의 수를 작동합니다 :
function intersection(arr1, arr2) { var temp = []; for (var i in arr1) { var element = arr1[i]; if (arr2.indexOf(element) > -1) { temp.push(element); } } return temp; } function multi_intersect() { var arrays = Array.prototype.slice.apply(arguments).slice(1); var temp = arguments[0]; for (var i in arrays) { temp = intersection(arrays[i], temp); if (temp == []) { break; } } return temp; } var arr1 = ['apple', 'orange', 'banana', 'pear', 'fish', 'pancake', 'taco', 'pizza']; var arr2 = ['taco', 'fish', 'apple', 'pizza']; var arr3 = ['banana', 'pizza', 'fish', 'apple']; multi_intersect(arr1, arr2, arr3);
-
8.
// The easiest way!! var arr1 = ['apple', 'orange', 'banana', 'pear', 'fish', 'pancake', 'taco', 'pizza']; var arr2 = ['taco', 'fish', 'apple', 'pizza']; var arr3 = ['banana', 'pizza', 'fish', 'apple']; var arr4 = []; for(let i of arr1){ if(arr2.includes(i) && arr3.includes(i)){ arr4.push(i) } } console.log(arr4)
-
9.다만 그것의 지옥, 또 다른 긴 손 접근 :
다만 그것의 지옥, 또 다른 긴 손 접근 :
function getCommon(a) { // default result is copy of first array var result = a[0].slice(); var mem, arr, found = false; // For each member of result, see if it's in all other arrays // Go backwards so can splice missing entries var i = result.length; while (i--) { mem = result[i]; // Check in each array for (var j=1, jLen=a.length; j<jLen; j++) { arr = a[j]; found = false; // For each member of arr and until found var k = arr.length; while (k-- && !found) { // If found in this array, set found to true if (mem == arr[k]) { found = true; } } // if word wasn't found in this array, remove it from result and // start on next member of result, skip remaining arrays. if (!found) { result.splice(i,1); break; } } } return result; } var data = [ ['taco', 'fish', 'apple', 'pizza', 'mango', 'pear'], ['apple', 'orange', 'banana', 'pear', 'fish', 'pancake', 'taco', 'pizza'], ['banana', 'pizza', 'fish', 'apple'], ['banana', 'pizza', 'fish', 'apple', 'mango', 'pear'] ];
기능 Object.prototype에에 thise에 따라 결코 열거 속성을 찾을 수 있습니다 :
// Return an array of Object.prototype property names that are not enumerable // even when added directly to an object. // Can be helpful with IE as properties like toString are not enumerable even // when added to an object. function getNeverEnumerables() { // List of Object.prototype property names plus a random name for testing var spNames = 'constructor toString toLocaleString valueOf ' + 'hasOwnProperty isPrototypeOf propertyIsEnumerable foo'; var spObj = {foo:'', 'constructor':'', 'toString':'', 'toLocaleString':'', 'valueOf':'', 'hasOwnProperty':'', 'isPrototypeOf':'', 'propertyIsEnumerable':''}; var re = []; // BUild list of enumerable names in spObj for (var p in spObj) { re.push(p); } // Remove enumerable names from spNames and turn into an array re = new RegExp('(^|\\s)' + re.join('|') + '(\\s|$)','g'); return spNames.replace(re, ' ').replace(/(^\s+)|\s\s+|(\s+$)/g,'').split(' '); } document.write(getNeverEnumerables().join('<br>'));
-
10.이것은 본질적으로 내려 삶은 모든 해답의 편집이다 :
이것은 본질적으로 내려 삶은 모든 해답의 편집이다 :
// 배열의 교차 어떤 수 : 교차 함수 () { // - 인수 -> 기존의 배열, // - 첫 번째 항목 (어레이 [0]) = 최단은 반복을 줄이기 VAR 어레이 = Array.prototype.slice.call (인수) .sort (함수 (a, b) { a.length을 반환 - b.length를을; }); 기재로서 사용 // 제 어레이 [0]. VAR arrays.shift A = (); VAR 결과 = []; 위한 (VAR 난 = a.length를, 난 -) { VAR의 발은 = A [I]; // 방지 중복 경우 (result.indexOf (발) <0) { // 찾다. 목표물 탐색 VAR는 = 진정한 발견; 위한 VAR (II =는 arrays.length; ii--) { 경우 (배열 [Ⅱ] .indexOf (발) <0) { 발견 = 거짓; 단절; } } 경우 (발견) { (발) result.push; } } } 결과를 반환; } / * 느리지 만 작은 코드베이스 // : 교차 함수 () { // - 인수 -> 기존의 배열, // - 첫 번째 항목 (어레이 [0]) = 최단은 반복을 줄이기 VAR 어레이 = Array.prototype.slice.call (인수) .sort (함수 (a, b) { a.length을 반환 - b.length를을; }); 기재로서 사용 // 제 어레이 [0]. VAR arrays.shift A = (); 리턴 a.filter (함수 (브로, IDX, AA) { // 찾다. 목표물 탐색 위한 (VAR 난을 arrays.length = 나는 -) { 경우 (배열 [I] .indexOf (발) <0) { false를 반환; } } // 방지 중복 창 aa.indexOf (발) === IDX; }); } * / VAR arr1 = [ '사과', '오렌지', '바나나', '배', '물고기', '팬케이크', '타코', '피자']; VAR arr2 = [ '타코', '물고기', '사과', '피자', '사과', '사과']; var에 arr3 = [ '바나나', '피자', '물고기', '사과', '물고기']; VAR arr1 = [ '사과', '오렌지', '바나나', '배', '물고기', '팬케이크', '타코', '피자']; VAR arr2 = [ '타코', '물고기', '사과', '피자', '사과', '사과']; var에 arr3 = [ '바나나', '피자', '물고기', '사과', '물고기']; VAR 결과 = 교차 (arr1, arr2, arr3); // 바이올린 출력의 경우 : VAR ELEM = document.getElementById를 ( "결과"); elem.innerHTML = JSON.stringify (결과); CONSOLE.LOG (결과);
결과 DIV>11.당신은 배열 번호가 감소하고 배열 # 필터를 사용할 수 있습니다. 각 배열의 경우, 모든 고유 한 값을 얻을지도 조회 및 그들의 수를 유지한다. 완료, 배열 번호 필터 한번 조회 어레이의 길이에 기초.
당신은 배열 번호가 감소하고 배열 # 필터를 사용할 수 있습니다. 각 배열의 경우, 모든 고유 한 값을 얻을지도 조회 및 그들의 수를 유지한다. 완료, 배열 번호 필터 한번 조회 어레이의 길이에 기초.
CONST commonElements = (... 도착) => { CONST 룩업 arr.reduce = ((매핑 a) => { CONST 고유 = ... 새로운 세트 (a)]; unique.forEach (V => { map.set (V (map.get (V) || 0) + 1) }); 지도를 반환; }, 새지도 ()); 복귀 ... lookup.keys ()] 필터 (K => lookup.get (K) === arr.length).; } const를 arr1 = [ '사과', '오렌지', '바나나', '배', '물고기', '팬케이크', '타코', '피자'], arr2 = [ '타코', '물고기', '사과', '피자'], arr3 = [ '바나나', '피자', '물고기', '사과']; CONSOLE.LOG (commonElements (arr1, arr2, arr3));
from https://stackoverflow.com/questions/11076067/finding-matches-between-multiple-javascript-arrays by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 패스 자바 스크립트 배열 -> PHP (0) 2020.10.11 [JQUERY] SCRIPT7002 : XMLHttpRequest의 : 네트워크 오류 0x2ef3는 오류로 인해 00002ef3에 작업을 완료 할 수 없습니다 (0) 2020.10.11 [JQUERY] $ (창) .load와 $ (문서) .ready의 차이점은 무엇입니까? (0) 2020.10.11 [JQUERY] 대화 상자 실행 1 초 사라질 하시나요? (0) 2020.10.11 [JQUERY] 자바 스크립트를 사용하여 URL 확인하려고 (0) 2020.10.11