86

たとえば、次のような配列があります。

var arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 8, 9, 10, 10]

私の目的は、配列から繰り返し要素を破棄し、このような最終配列を取得することです。

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

JavaScriptでこれをどのように達成できますか?

注: 配列はソートされていません。値は任意の順序にすることができます。

4

5 に答える 5

247

を使用すると簡単ですArray.filter

var unique = arr.filter(function(elem, index, self) {
    return index === self.indexOf(elem);
})
于 2013-05-25T08:47:52.010 に答える
23

要素はまだ順序付けされているため、マップを作成する必要はありません。迅速な解決策があります。

var newarr = [arr[0]];
for (var i=1; i<arr.length; i++) {
   if (arr[i]!=arr[i-1]) newarr.push(arr[i]);
}

配列がソートされていない場合は、マップを使用します:

var newarr = (function(arr){
  var m = {}, newarr = []
  for (var i=0; i<arr.length; i++) {
    var v = arr[i];
    if (!m[v]) {
      newarr.push(v);
      m[v]=true;
    }
  }
  return newarr;
})(arr);

これは、受け入れられている回答よりもはるかに高速であることに注意してください。

于 2013-05-25T08:33:22.743 に答える
6

jqueryを使用してこのように試すことができます

 var arr = [1,2,2,3,4,5,5,5,6,7,7,8,9,10,10];
    var uniqueVals = [];
    $.each(arr, function(i, el){
        if($.inArray(el, uniqueVals) === -1) uniqueVals.push(el);
    });
于 2013-05-25T08:34:21.900 に答える