JavaScript配列の重量除去方法と性能分析


必要なものがあったら、配列の中の同じ項目を取り除く必要があります.この需要自体は複雑ではないですが、性能のことを考えると、よく考えなければなりません.いくつかのよくある方法をテストしました.
氏は長さ10万の繰り返し配列になります.
var arr = [];
for(var i=0; i<100000; i++){
	arr.push( Math.floor(Math.random()*100000));
}
var tt = Date.now();
//                 
//abc.......

console.log(Date.now() - tt);
一、ES 6 Setを利用して重さを取り、一行のコードで解決し、性能が非常に高い(ES 6で一番よく使われている)
//  :7ms
Array.from(new Set(arr));

//       ,    :7ms
[...new Set(arr)]
二、for入れ子forを利用して、spliceを再利用します(ES 5で一番よく使われています).性能はとても遅いです.
//  :8367ms
for(var i=0; i<arr.length-1; i++){
	for(var j=i+1; j<arr.length; j++){
		if(arr[i]==arr[j]){//         ,splice       
			arr.splice(j,1);
			j--;
		}
	}
}
三、indexOfまたはincludesを利用して重さを取り、性能は一般的です.
//  :2860ms
var array = [];
for(var i =0; i < arr.length; i++) {
	if(array.indexOf(arr[i]) === -1) {
		array.push(arr[i])
	}
}
arr = array;

// includes,  :2842ms,    
var array = [];
for(var i =0; i < arr.length; i++) {
	if(!array.includes( arr[i])) {
		array.push(arr[i])
	}
}
arr = array;
四、ソト()を利用して並べ替えて、繰り返したデータを全部取り除きます.
//  :43ms
arr = arr.sort()
var arrry= [arr[0]]; //       ,    ,          
for(var i =1; i < arr.length; i++) {
	if(arr[i] !== arr[i-1]) {
		arrry.push(arr[i]);
	}
}
arr = array;

//       ,     ,  :2110ms,    push      
arr = arr.sort()
for(var i =1; i < arr.length; i++) {
	if(arr[i] === arr[i-1]) {
		arr.splie(i, 1);
		i--;
	}
}
五、filter+Object属性で判断して、性能はまだいいです.
//  :80ms
var obj = {}, key;
arr = arr.filter(function(item, index, arr){
	key = typeof item + item;
	return obj.hasOwnProperty(key) ? false: (obj[key] = true);
})
六、filter+indexOfで判断して、性能が悪い
//3693ms
arr = arr.filter(function(item, index, arr){
	//    ,            ==     ,        
	return arr.indexOf(item,0) === index;
});
以上より、最適解は第一の案を用いることである.
Array.from(new Set(arr));
 
[...new Set(arr)]
エス6がサポートされていない環境で、第四案を使用します.ソト()を利用して並べ替えて、重複したデータを全部取り除きます.
arr = arr.sort()
var arrry= [arr[0]]; 
for(var i =1; i < arr.length; i++) {
	if(arr[i] !== arr[i-1]) {
		arrry.push(arr[i]);
	}
}
arr = array;
他にもっと効率的なアルゴリズムがあれば、メッセージを残して教えてください.ありがとうございます.