복붙노트

[JQUERY] 배열에 고유 한 값을 얻는 방법

JQUERY

배열에 고유 한 값을 얻는 방법

해결법


  1. 1.내가 @ 로켓의 답변에 대한 의견에 대해 계속 때문에, 나뿐만 아니라 예를 들어 그 사용없이 라이브러리를 제공 할 수 있습니다. 이것은 포함하고 독특한 두 개의 새로운 프로토 타입 기능을 필요로

    내가 @ 로켓의 답변에 대한 의견에 대해 계속 때문에, 나뿐만 아니라 예를 들어 그 사용없이 라이브러리를 제공 할 수 있습니다. 이것은 포함하고 독특한 두 개의 새로운 프로토 타입 기능을 필요로

    Array.prototype.contains = 함수 (V) { 위한 VAR (I = 0; I <식에서 나타내지; I ++) { (이것은 [I] === V) true를 반환하는 경우; } false를 반환; }; Array.prototype.unique = 함수 () { VAR의 도착 = []; 위한 VAR (I = 0; I <식에서 나타내지; I ++) { 만약 (!의 arr.contains (이 [I])) { arr.push (이 [I]); } } 편곡 반환; } VAR 중복 = [1, 3, 4, 2, 1, 2, 3, 8; VAR의 순 duplicates.unique = (); // 결과 = 1,3,4,2,8] CONSOLE.LOG (순);

    각 요소의 같이 IndexOf -1로 동일한 경우는 더 안정성을 위해, 당신은 MDN의 같이 IndexOf 심 체크에 포함 교체 할 수 있습니다 : 문서를


  2. 2.또는 현재 브라우저와 호환 한 라이너 (단순하고 기능)을 찾는 사람들을 위해 :

    또는 현재 브라우저와 호환 한 라이너 (단순하고 기능)을 찾는 사람들을 위해 :

    하자 = "1", "1", "2", "3", "3", "1"]; (=== Ⅰ) (항목, I, AR) => ar.indexOf (항목) = 고유 a.filter하자; CONSOLE.LOG (독특한);

    업데이트 18-04-2017

    이제 메인 라인 브라우저의 최신 버전에서 대폭적인 지원 (호환성)이 'Array.prototype.includes'처럼 나타납니다

    업데이트 29-07-2015 :

    브라우저가 직접이 질문에 대답하지 않지만 표준화 된 'Array.prototype.includes'방법을 지원하기위한 작품 계획이있다; 종종 관련이있다.

    용법:

    ["1", "1", "2", "3", "3", "1"].includes("2");     // true
    

    Polyfill (브라우저 지원, 모질라에서 소스) :

    // https://tc39.github.io/ecma262/#sec-array.prototype.includes
    if (!Array.prototype.includes) {
      Object.defineProperty(Array.prototype, 'includes', {
        value: function(searchElement, fromIndex) {
    
          // 1. Let O be ? ToObject(this value).
          if (this == null) {
            throw new TypeError('"this" is null or not defined');
          }
    
          var o = Object(this);
    
          // 2. Let len be ? ToLength(? Get(O, "length")).
          var len = o.length >>> 0;
    
          // 3. If len is 0, return false.
          if (len === 0) {
            return false;
          }
    
          // 4. Let n be ? ToInteger(fromIndex).
          //    (If fromIndex is undefined, this step produces the value 0.)
          var n = fromIndex | 0;
    
          // 5. If n ≥ 0, then
          //  a. Let k be n.
          // 6. Else n < 0,
          //  a. Let k be len + n.
          //  b. If k < 0, let k be 0.
          var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    
          // 7. Repeat, while k < len
          while (k < len) {
            // a. Let elementK be the result of ? Get(O, ! ToString(k)).
            // b. If SameValueZero(searchElement, elementK) is true, return true.
            // c. Increase k by 1.
            // NOTE: === provides the correct "SameValueZero" comparison needed here.
            if (o[k] === searchElement) {
              return true;
            }
            k++;
          }
    
          // 8. Return false
          return false;
        }
      });
    }
    

  3. 3.여기에 내가 여기에 포함되지 않은 참조 것을 ES6에 대한 많은 청소기 솔루션입니다. 그것은 설정 및 확산 연산자를 사용 ...

    여기에 내가 여기에 포함되지 않은 참조 것을 ES6에 대한 많은 청소기 솔루션입니다. 그것은 설정 및 확산 연산자를 사용 ...

    var a = [1, 1, 2];
    
    [... new Set(a)]
    

    어떤 반환 [1, 2]


  4. 4.ES6 구문

    ES6 구문

    목록 list.filter = ((X, I, a) => a.indexOf () 1~10 ===)

    x --> item in array
    i --> index of item
    a --> array reference, (in this case "list")
    

    ES5 구문

    list = list.filter(function (x, i, a) { 
        return a.indexOf(x) === i; 
    });
    

    브라우저 호환성 : IE9 +


  5. 5.이제 ES6에서 우리는 새로 도입 된 ES6 기능을 사용할 수 있습니다

    이제 ES6에서 우리는 새로 도입 된 ES6 기능을 사용할 수 있습니다

    let items = [1,1,1,1,3,4,5,2,23,1,4,4,4,2,2,2]
    let uniqueItems = Array.from(new Set(items))
    

    또는 반복 가능 객체에 배열 확산 구문에 의해

    let items = [1,1,1,1,3,4,5,2,23,1,4,4,4,2,2,2]; 
    let uniqueItems = [...new Set(items)];
    

    그것은 독특한 결과를 반환합니다.

    [1, 3, 4, 5, 2, 23]
    

  6. 6.ECMA 스크립트 2,016 사용하여 당신은 단순히 이런 식으로 할 수 있습니다.

    ECMA 스크립트 2,016 사용하여 당신은 단순히 이런 식으로 할 수 있습니다.

     var arr = ["a", "a", "b"];
     var uniqueArray = Array.from(new Set(arr)); // Unique Array ['a', 'b'];
    

    설정은 항상 독특하고 Array.from ()를 사용하면 배열에 설정을 변환 할 수 있습니다. 참조를 위해 문서화를 보라.

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set


  7. 7.당신은 그대로 원래의 배열를 마칠 경우,

    당신은 그대로 원래의 배열를 마칠 경우,

    당신은 1 세대의 독특한 요소를 포함하는 두 번째 배열이 필요합니다

    대부분의 브라우저는 Array.prototype.filter 있습니다 :

    var unique= array1.filter(function(itm, i){
        return array1.indexOf(itm)== i; 
        // returns true for only the first instance of itm
    });
    
    
    //if you need a 'shim':
    Array.prototype.filter= Array.prototype.filter || function(fun, scope){
        var T= this, A= [], i= 0, itm, L= T.length;
        if(typeof fun== 'function'){
            while(i<L){
                if(i in T){
                    itm= T[i];
                    if(fun.call(scope, itm, i, T)) A[A.length]= itm;
                }
                ++i;
            }
        }
        return A;
    }
     Array.prototype.indexOf= Array.prototype.indexOf || function(what, i){
            if(!i || typeof i!= 'number') i= 0;
            var L= this.length;
            while(i<L){
                if(this[i]=== what) return i;
                ++i;
            }
            return -1;
        }
    

  8. 8.요즘, 당신은 독특한 설정에 배열을 변환 ES6의 설정 데이터 형식을 사용할 수 있습니다. 당신이 배열 방법을 사용해야 할 경우, 당신은 배열로 다시 설정할 수 있습니다 :

    요즘, 당신은 독특한 설정에 배열을 변환 ES6의 설정 데이터 형식을 사용할 수 있습니다. 당신이 배열 방법을 사용해야 할 경우, 당신은 배열로 다시 설정할 수 있습니다 :

    var arr = ["a", "a", "b"];
    var uniqueSet = new Set(arr); // {"a", "b"}
    var uniqueArr = Array.from(uniqueSet); // ["a", "b"]
    //Then continue to use array methods:
    uniqueArr.join(", "); // "a, b"
    

  9. 9.아니 자바 스크립트의 기본,하지만 라이브러리의 많은이 방법을 가지고있다.

    아니 자바 스크립트의 기본,하지만 라이브러리의 많은이 방법을 가지고있다.

    (링크) Underscore.js의 _.uniq (배열) 꽤 잘 (소스) 작동합니다.


  10. 10.jQuery를 사용하여, 여기에 내가 만든 배열 고유의 기능입니다 :

    jQuery를 사용하여, 여기에 내가 만든 배열 고유의 기능입니다 :

    Array.prototype.unique = function () {
        var arr = this;
        return $.grep(arr, function (v, i) {
            return $.inArray(v, arr) === i;
        });
    }
    
    console.log([1,2,3,1,2,3].unique()); // [1,2,3]
    

  11. 11.짧고 용액 2 어레이를 사용하여;

    짧고 용액 2 어레이를 사용하여;

    var axes2=[1,4,5,2,3,1,2,3,4,5,1,3,4];
    
        var distinct_axes2=[];
    
        for(var i=0;i<axes2.length;i++)
            {
            var str=axes2[i];
            if(distinct_axes2.indexOf(str)==-1)
                {
                distinct_axes2.push(str);
                }
            }
        console.log("distinct_axes2 : "+distinct_axes2); // distinct_axes2 : 1,4,5,2,3
    

  12. 12.빠르고, 소형, 아니 중첩 된 루프는 문자열과 숫자뿐만 아니라, 술어 소요되며, 코드의 5 라인 개체와 함께 작동합니다!

    빠르고, 소형, 아니 중첩 된 루프는 문자열과 숫자뿐만 아니라, 술어 소요되며, 코드의 5 라인 개체와 함께 작동합니다!

    function findUnique(arr, predicate) {
      var found = {};
      arr.forEach(d => {
        found[predicate(d)] = d;
      });
      return Object.keys(found).map(key => found[key]); 
    }
    

    예 : 유형별로 고유 항목을 찾으려면 :

    var things = [
      { name: 'charm', type: 'quark'},
      { name: 'strange', type: 'quark'},
      { name: 'proton', type: 'boson'},
    ];
    
    var result = findUnique(things, d => d.type);
    //  [
    //    { name: 'charm', type: 'quark'},
    //    { name: 'proton', type: 'boson'}
    //  ] 
    

    당신은 최초의 고유 한 항목 대신 마지막 추가 거기에 found.hasOwnProperty () 체크를 찾으려면.


  13. 13.솔루션의 대부분은 위의 높은 실행 시간 복잡도가 있습니다.

    솔루션의 대부분은 위의 높은 실행 시간 복잡도가 있습니다.

    여기에 사용이 감소하고 O (n)이 시간에 일을 할 수있는 솔루션입니다.

    Array.prototype.unique = Array.prototype.unique || 함수() { VAR의 도착 = []; this.reduce (함수 (해시 NUM) { 경우 (대해서 typeof 해쉬 [NUM] === '미정의') { 해쉬 [NUM = 1; (NUM) arr.push; } 해시를 반환; }, {}); 편곡 반환; } VAR 인 myArr = [3,1,2,3,3,3]; CONSOLE.LOG (myArr.unique ()); // [3,1,2];

    노트 :

    이 솔루션은 절감에 의존하지 않는다. 아이디어는 오브젝트 맵을 생성하고 배열에 독특한 사람을 밀어하는 것입니다.


  14. 14.당신은 단지 사항 Array.some와 Array.reduce와 유니크를 찾을 바닐라 JS가 필요합니다. ES2015 구문으로 만 62 문자입니다.

    당신은 단지 사항 Array.some와 Array.reduce와 유니크를 찾을 바닐라 JS가 필요합니다. ES2015 구문으로 만 62 문자입니다.

    a.reduce((c, v) => b.some(w => w === v) ? c : c.concat(v)), b)
    

    사항 Array.some 및 Array.reduce는 IE9 +와 다른 브라우저에서 지원됩니다. 그냥 ES2015 구문을 지원하지 않는 브라우저에서 지원 일반 기능을위한 지방 화살표 기능을 변경합니다.

    var a = [1,2,3];
    var b = [4,5,6];
    // .reduce can return a subset or superset
    var uniques = a.reduce(function(c, v){
        // .some stops on the first time the function returns true                
        return (b.some(function(w){ return w === v; }) ?  
          // if there's a match, return the array "c"
          c :     
          // if there's no match, then add to the end and return the entire array                                        
          c.concat(v)}),                                  
      // the second param in .reduce is the starting variable. This is will be "c" the first time it runs.
      b);                                                 
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce


  15. 15.

    Array.prototype.unique = function () {
        var dictionary = {};
        var uniqueValues = [];
        for (var i = 0; i < this.length; i++) {
            if (dictionary[this[i]] == undefined){
                dictionary[this[i]] = i;
                uniqueValues.push(this[i]);
            }
        }
        return uniqueValues; 
    }
    

  16. 16.ES6 방법 :

    ES6 방법 :

    const uniq = (arr) => (arr.filter((item, index, arry) => (arry.indexOf(item) === index)));
    

  17. 17.나는 순수 JS에서이 문제를 노력했다. 나는 다음 단계를 따라했습니다 1. 정렬 지정된 배열, 정렬 된 배열을 통해 2 루프, 현재 값과 이전 값과 다음 값을 확인합니다

    나는 순수 JS에서이 문제를 노력했다. 나는 다음 단계를 따라했습니다 1. 정렬 지정된 배열, 정렬 된 배열을 통해 2 루프, 현재 값과 이전 값과 다음 값을 확인합니다

    // JS
    var inpArr = [1, 5, 5, 4, 3, 3, 2, 2, 2,2, 100, 100, -1];
    
    //sort the given array
    inpArr.sort(function(a, b){
        return a-b;
    });
    
    var finalArr = [];
    //loop through the inpArr
    for(var i=0; i<inpArr.length; i++){
        //check previous and next value 
      if(inpArr[i-1]!=inpArr[i] && inpArr[i] != inpArr[i+1]){
            finalArr.push(inpArr[i]);
      }
    }
    console.log(finalArr);
    

    데모


  18. 18.당신은 오래된 브라우저에 대해 너무 걱정할 필요가없는 경우,이 설계되었습니다 어떤 설정을 정확하게이다.

    당신은 오래된 브라우저에 대해 너무 걱정할 필요가없는 경우,이 설계되었습니다 어떤 설정을 정확하게이다.

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

    const set1 = new Set([1, 2, 3, 4, 5, 1]);
    // returns Set(5) {1, 2, 3, 4, 5}
    

  19. 19.또 다른이 질문에 생각했다. 여기에 내가 적은 코드와이를 달성하기 위해 한 일이다.

    또 다른이 질문에 생각했다. 여기에 내가 적은 코드와이를 달성하기 위해 한 일이다.

    VAR distinctMap = {}; VAR testArray = [ '존', '존', '제이슨', '제이슨']; 경우 (나는


  20. 25.나는 JQuery와 고유 기능을 붙박이 있습니다.

    나는 JQuery와 고유 기능을 붙박이 있습니다.

    uniqueValues= jQuery.unique( duplicateValues );
    

    자세한 내용은 당신이 JQuery와 API의 자료 문서를 참조 할 수 있습니다.

    http://api.jquery.com/jquery.unique/

  21. from https://stackoverflow.com/questions/11246758/how-to-get-unique-values-in-an-array by cc-by-sa and MIT license