配列['0','1','1','2','3','3','3']
を指定すると、結果は になります['0','1','2','3']
。
17 に答える
編集済み
ES6 ソリューション:
[...new Set(a)];
別:
Array.from(new Set(a));
古い応答。O(n^2) (大きな配列では使用しないでください!)
var arrayUnique = function(a) {
return a.reduce(function(p, c) {
if (p.indexOf(c) < 0) p.push(c);
return p;
}, []);
};
秩序を維持したい場合:
arr = arr.reverse().filter(function (e, i, arr) {
return arr.indexOf(e, i+1) === -1;
}).reverse();
組み込みの逆 indexof がないため、配列を逆にし、重複を除外してから、再度逆にします。
フィルター関数は、現在のインデックスより後 (元の配列の前) に出現する要素を探します。見つかった場合は、この要素を破棄します。
編集:
または、lastindexOf を使用することもできます (順序を気にしない場合)。
arr = arr.filter(function (e, i, arr) {
return arr.lastIndexOf(e) === i;
});
これにより、一意の要素が保持されますが、最後の出現のみが保持されます。これは、['0', '1', '0'] が ['0', '1'] ではなく ['1', '0'] になることを意味します。
以下は配列プロトタイプ関数です。
Array.prototype.unique = function() {
var unique = [];
for (var i = 0; i < this.length; i++) {
if (unique.indexOf(this[i]) == -1) {
unique.push(this[i]);
}
}
return unique;
};
function array_unique(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) == -1) {
result.push(arr[i]);
}
}
return result;
}
組み込み関数ではありません。製品リストにアイテムが含まれていない場合は、それを一意のリストに追加し、一意のリストを返します。
function array_unique(nav_array) {
nav_array = nav_array.sort(function (a, b) { return a*1 - b*1; });
var ret = [nav_array[0]];
// Start loop at 1 as element 0 can never be a duplicate
for (var i = 1; i < nav_array.length; i++) {
if (nav_array[i-1] !== nav_array[i]) {
ret.push(nav_array[i]);
}
}
return ret;
}
配列から重複した値を削除する方法は次のとおりです。
function ArrNoDupe(dupArray) {
var temp = {};
for (var i = 0; i < dupArray.length; i++) {
temp[dupArray[i]] = true;
var uniqueArray = [];
for (var k in temp)
uniqueArray.push(k);
return uniqueArray;
}
}
もう 1 つの方法は、配列情報の初期ストレージにオブジェクトを使用することです。次に、元に戻します。例えば:
var arr = ['0','1','1','2','3','3','3'];
var obj = {};
for(var i in arr)
obj[i] = true;
arr = [];
for(var i in obj)
arr.push(i);
変数 "arr" には ["0", "1", "2", "3", "4", "5", "6"] が含まれるようになりました
私はこれを使うのが好きです。for ループを使用しても問題はありません。組み込み関数を使用するのが好きなだけです。型キャストまたは非型キャスト マッチングのブール引数を渡すこともできます。その場合、for ループを使用します (filter()
メソッド/関数は型キャスト マッチング (===) を行います) 。
Array.prototype.unique =
function()
{
return this.filter(
function(val, i, arr)
{
return (i <= arr.indexOf(val));
}
);
}
Google クロージャー ライブラリを使用しているgoog.array.removeDuplicates
方は、unique と同じ を自由に使用できます。ただし、配列自体は変更されます。
//
Array.prototype.unique =
( function ( _where ) {
return function () {
for (
var
i1 = 0,
dups;
i1 < this.length;
i1++
) {
if ( ( dups = _where( this, this[i1] ) ).length > 1 ) {
for (
var
i2 = dups.length;
--i2;
this.splice( dups[i2], 1 )
);
}
}
return this;
}
} )(
function ( arr, elem ) {
var locs = [];
var tmpi = arr.indexOf( elem, 0 );
while (
( tmpi ^ -1 )
&& (
locs.push( tmpi ),
tmpi = arr.indexOf( elem, tmpi + 1 ), 1
)
);
return locs;
}
);
//
Array.prototype.unique =function(){
var uniqObj={};
for(var i=0;i< this.length;i++){
uniqObj[this[i]]=this[i];
}
return uniqObj;
}