JSは配列デ重量を実現します.(重複要素は一つだけ残します.)

1801 ワード

JavaScriptは配列中の重複要素を除去することを実現します.
ネット上のたくさんのおかみさんの書き方を見て、蠢きたくて、自分で照らしていくつか書いて、一番いいのを選んで出して、皆さんと分かち合います.
データを用意する
長さ10 Wと5 Wの2つの配列をそれぞれ作成しました.
2つの配列をunique()法で結合し、重複した項目を削除します.
let arr1 = Array.from(new Array(100000), (x, index)=>{
    return index
})
 
let arr2 = Array.from(new Array(50000), (x, index)=>{
    return index+index
})
 
let start = new Date().getTime()
console.log('      ')
 
function unique(a, b) {
    //    
}
 
console.log('      ', unique(arr1,arr2).length);
let end = new Date().getTime()
console.log('  ', end - start);
デバッグ関数を入れて実行します.
まず使ったのは劉春龍大王が書いたのです.
arr3 = arr1.concat(arr2);

Array.prototype.unique4 = function(){
    this.sort();
    var re=[this[0]];
    for(var i = 1; i < this.length; i++)
    {
        if( this[i] !== re[re.length-1])
        {
            re.push(this[i]);
        }
    }
    return re;
}

//  
console.log('      ', arr3.unique4().length);
let end = new Date().getTime()
console.log('  ', end - start);
出力結果
      
       100000
   169
そしてWise.Wrong大男のfor…of+Objectです.
function distinct(a, b) {
    let arr = a.concat(b)
    let result = []
    let obj = {}
 
    for (let i of arr) {
        if (!obj[i]) {
            result.push(i)
            obj[i] = 1
        }
    }
 
    return result
}
出力結果
      
       100000
   22
最後に、Wise.Wrong大男の張った書き方を参照して、次のように書きました.
      
       100000
   19
ここではAray.prototype.uniqueをJavaScript常用関数ライブラリ-jtilsに集めました.
jutils.arrayUniq();
重複したデータを持つ配列を入れてそのまま使用できます.
参考文献
  • jtils-JavaScript常用関数ライブラリ
  • JavaScript高性能配列除去-Wise.Wrong
  • JSの中で組は重い問題に行きます.劉春龍のブログ
  • .