복붙노트

[JQUERY] 자바 스크립트 알고리즘은 다른 배열에없는 배열의 요소를 찾을 수

JQUERY

자바 스크립트 알고리즘은 다른 배열에없는 배열의 요소를 찾을 수

해결법


  1. 1.

    var z = $.grep(y, function(el){return $.inArray(el, x) == -1}); 
    

    또한, 그 메소드 이름은 자신의 좋은 너무 짧습니다. 나는 isElementInArray하지 같이 IndexOf를 의미하는 기대.

    객체가있는 데모의 경우 http://jsfiddle.net/xbdz3/6/을 참조하십시오.


  2. 2.새로운 ECMA5 JavaScript로 늦은 답변 :

    새로운 ECMA5 JavaScript로 늦은 답변 :

    var x = ["a","b","c","t"];
    var y = ["d","a","t","e","g"];
    
    myArray = y.filter( function( el ) {
      return x.indexOf( el ) < 0;
    });
    

  3. 3.에서 ES6 단순히

    에서 ES6 단순히

    CONST X = [ "A", "B", "C", "t"]; CONST Y = "D", "A", "t", "E", "g"]; CONSOLE.LOG (y.filter (E => x.includes (E))!);

    (또 다른 옵션 ===) y.filter (E => x.indexOf (E 인 - 1))


  4. 4.여기 underscore.js를 사용하여 대안이다 :

    여기 underscore.js를 사용하여 대안이다 :

    function inAButNotInB(A, B) {
      return _.filter(A, function (a) {
        return !_.contains(B, a);
      });
    }
    

  5. 5.어쩌면 jLinq 도와 드릴까요?

    어쩌면 jLinq 도와 드릴까요?

    그것은 당신이 자바 스크립트 객체에 대해 같은 쿼리를 실행할 수 있습니다.

    예를 들면 :

    var users = [ { name: "jacob", age: 25 },  { name: "bob" , age: 30 }]
    var additionalusers = [ { name: "jacob", age: 25 },  { name: "bill" , age: 25 }]
    
    var newusers = jLinq.from(users).except(additionalusers).select();
    
    >>> newusers = [ { name: "bob" , age: 30 } ]
    

    이 순간에 당신을 위해 조금 잔인한,하지만 내가 대해 배울 기뻐하는 강력한 솔루션입니다.

    그것은 교차, 노동 조합, 손잡이 부울 논리 및 모든 종류의 훌륭한 Linq 스타일의 선량을 할 수 있습니다.


  6. 6.만들기 먼저 배열의 복사본을 분류. 상위 요소가 동일한 경우, 그들 모두를 제거합니다. 그렇지 않으면 작은 요소를 제거하고 결과를 배열에 추가합니다. 하나 개의 배열이 비어있는 경우, 결과 및 마무리에 다른 배열의 나머지 부분을 추가합니다. 대신 요소를 제거하는 정렬 된 배열을 반복 할 수 있습니다.

    만들기 먼저 배열의 복사본을 분류. 상위 요소가 동일한 경우, 그들 모두를 제거합니다. 그렇지 않으면 작은 요소를 제거하고 결과를 배열에 추가합니다. 하나 개의 배열이 비어있는 경우, 결과 및 마무리에 다른 배열의 나머지 부분을 추가합니다. 대신 요소를 제거하는 정렬 된 배열을 반복 할 수 있습니다.

    // assume x and y are sorted
    xi = 0; yi = 0; xc = x.length; yc = y.length;
    while ( xi < xc && yi < yc ) {
      if ( x[xi] == y[yi] ) {
        xi += 1;
        yi += 1;
      } else if ( x[xi] < y[yi] ) {
        z.push( x[xi] );
        xi += 1;
      } else {
        z.push( y[yi] );
        yi += 1;
      }
    }
    // add remainder of x and y to z.  one or both will be empty.
    

  7. 7.이 늦은 대답이지만, 일부는 것이 도움이 찾을 수 있도록 더 라이브러리를 사용하지 않습니다.

    이 늦은 대답이지만, 일부는 것이 도움이 찾을 수 있도록 더 라이브러리를 사용하지 않습니다.

    /**
     * Returns a non-destructive Array of elements that are not found in
     * any of the parameter arrays.
     *
     * @param {...Array} var_args   Arrays to compare.
     */
    Array.prototype.uniqueFrom = function() {
      if (!arguments.length)
        return [];
      var a1 = this.slice(0); // Start with a copy
    
      for (var n=0; n < arguments.length; n++) {
        var a2 = arguments[n];
        if (!(a2 instanceof Array))
          throw new TypeError( 'argument ['+n+'] must be Array' );
    
        for(var i=0; i<a2.length; i++) {
          var index = a1.indexOf(a2[i]);
          if (index > -1) {
            a1.splice(index, 1);
          } 
        }
      }
      return a1;
    }
    

    예:

    var sheetUsers = ['joe@example.com','fred@example.com','sam@example.com'];
    var siteViewers = ['joe@example.com','fred@example.com','lucy@example.com'];
    var viewersToAdd = sheetUsers.uniqueFrom(siteViewers);  // [sam@example.com]
    var viewersToRemove = siteViewers.uniqueFrom(sheetUsers);  // [lucy@example.com]
    

  8. 8.

     findDiff = (A, B) => {
         return  A.filter(function (a) {
              return !B.includes(a);
         });
     }
    
  9. from https://stackoverflow.com/questions/2963281/javascript-algorithm-to-find-elements-in-array-that-are-not-in-another-array by cc-by-sa and MIT license