JavaScript配列は一番いい選択をします.


, method_* ( )試験環境:バージョン57.0.2987.133(64-bit)
var arr1 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 1, 2, 3, 4, 5, 6, "1", "2", "1", "2"];
var arr2 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 1, 2, 3, 4, 5, 6];

while(arr1.length < 600000){

    arr1 = arr1.concat(arr1);
    arr2 = arr2.concat(arr2);
}
// 
// 
// 
// method_1:    -   -  -push
Array.prototype.unique = function(){

    var res = [this[0]],
        len = this.length;

    for(var i = 1; i < len; i ++){

        var repeat = false,
            rlen     = res.length;

        for (var j = 0; j < rlen; j ++){

            if(this[i] === res[j]){

                repeat = true;
                break;
            }
        }

        !repeat && res.push(this[i]);
    }

    return res;
}

var timestamp = new Date().getTime();
arr1 = arr1.unique();
console.log(new Date().getTime() - timestamp); //    18

var timestamp = new Date().getTime();
arr2 = arr2.unique();
console.log(new Date().getTime() - timestamp); //    10
// 
// 
// 
// method_2:    -  -   -  -push
Array.prototype.unique = function () {
 
    this.sort(function (a, b) {
     
        if (typeof a != typeof b && a == b) {
     
            if (typeof a == "number") {
                return -1;
            } else {
                return 1
            }
        }
        return parseInt(a) - parseInt(b);
    })

    var res = [this[0]],
        len = this.length;

    for (var i = 1; i < len; i ++) {

        var slen = res.length;


        if (this[i] !== res[slen -1]) {

            res.push(this[i]);
        }
    }

    return res;
}

var timestamp = new Date().getTime();
arr1 = arr1.unique();
console.log(new Date().getTime() - timestamp); //    121

var timestamp = new Date().getTime();
arr2 = arr2.unique();
console.log(new Date().getTime() - timestamp); //    93
// 
// 
// 
// method_3:    -    -   -    -  push 
Array.prototype.unique = function () {

    var res = [],
        obj = {},
        len = this.length;

    for (var i = 0; i < len; i++) {

        //            1   "1"   ,      ===
        !obj[this[i]] && res.push(this[i]) && (obj[this[i]] = 1);

    }
    return res;
}
var timestamp = new Date().getTime();
arr1 = arr1.unique();
console.log(new Date().getTime() - timestamp); //    8

var timestamp = new Date().getTime();
arr2 = arr2.unique();
console.log(new Date().getTime() - timestamp); //    5
// 
// 
// method_4:    -  -    -  push
Array.prototype.unique = function () {
 
    var res = [],
        len = this.length,
        i, j;
    for (i = 0; i < len; i++) {

        for (j = i + 1; j < len; j++) {

            if (this[i] === this[j]) {

                j = false;
                break;
            }
        }
        
        j && res.push(this[i]);
    }
    
    return res;
}
var timestamp = new Date().getTime();
arr1 = arr1.unique();
console.log(new Date().getTime() - timestamp); //    28

var timestamp = new Date().getTime();
arr2 = arr2.unique();
console.log(new Date().getTime() - timestamp); //    17
// 
// 
// 
// method_4:  Set
Array.prototype.unique = function (){

    var arr = new Set(this);

    return [...arr];
}
var timestamp = new Date().getTime();
arr1 = arr1.unique();
console.log(new Date().getTime() - timestamp); //    75

var timestamp = new Date().getTime();
arr2 = arr2.unique();
console.log(new Date().getTime() - timestamp); //    60
// 
// 
// 
// method_5:  find/findIndex/indexOf
Array.prototype.unique = function(){

    var res = [this[0]],
        len = this.length;

    for(var i = 1; i < len; i ++){

        var repeat = false,
            rlen     = res.length;

        if(!res.find((v,k)=>{return v === this[i]})){
            
            res.push(this[i]);
        }

        // if(res.indexOf(this[i]) == -1){

        //     res.push(this[i]);   
        // }

        // if(res.findIndex((v,k)=>{return v === this[i]}) == -1){
            
        //     res.push(this[i]);
        // }
    }

    return res;
}
var timestamp = new Date().getTime();
arr1 = arr1.unique();
console.log(new Date().getTime() - timestamp); //    110+

var timestamp = new Date().getTime();
arr2 = arr2.unique();
console.log(new Date().getTime() - timestamp); //    65+
締め括りをつける
method_1時間は18 /10であり、循環比較である.
method_2時間は121/93であり、依存性sortの並べ替え(文字と数字の組み合わせでsort callbackに依存する)が大幅に増加した場合、既存の配列順序に影響を与える.
method_3時間は8/5で、文字と数字の区別ができません.
method_4時間は28/7で、同じmethod_1はサイクルコントラストであるが,内層サイクル数は増加した.
method_5時間は75/60で、Setデータ構造特性を使用する.
method_5時間は110+/65+で、find/findIndex/indexOfを用いて判断します.
全体的に最適な選択はmethod_です.1
でもおすすめはmethod_です.5----大道からジェーンまで