복붙노트

[JQUERY] 여러 자바 스크립트 배열과 일치 찾기

JQUERY

여러 자바 스크립트 배열과 일치 찾기

해결법


  1. 1.

    var result = arrays.shift().filter(function(v) {
        return arrays.every(function(a) {
            return a.indexOf(v) !== -1;
        });
    });
    

    데모:


  2. 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. 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. 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. 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. 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. 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. 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. 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. 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 (결과);

    결과


  11. 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));

  12. from https://stackoverflow.com/questions/11076067/finding-matches-between-multiple-javascript-arrays by cc-by-sa and MIT license