たとえば、次のような配列があります。
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でこれをどのように達成できますか?
注: 配列はソートされていません。値は任意の順序にすることができます。
たとえば、次のような配列があります。
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でこれをどのように達成できますか?
注: 配列はソートされていません。値は任意の順序にすることができます。
を使用すると簡単ですArray.filter
:
var unique = arr.filter(function(elem, index, self) {
return index === self.indexOf(elem);
})
要素はまだ順序付けされているため、マップを作成する必要はありません。迅速な解決策があります。
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);
これは、受け入れられている回答よりもはるかに高速であることに注意してください。
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);
});