js實(shí)現(xiàn)數(shù)組去重的六種方法總結(jié)

方法一

使用數(shù)組的indexof方法,如果elementindex不相等則說明element相同,則過濾掉

Array.prototype.distinct1 = function () {
    return this.filter(function (element, index, self) {
        return self.indexOf(element) === index;
    });
}

方法二

ES6提供了數(shù)據(jù)結(jié)構(gòu)Set。類似于數(shù)組,但是沒有重復(fù)值??梢岳?code>Set數(shù)據(jù)結(jié)構(gòu)中值不能重復(fù)的特性去重

Array.prototype.distinct2 = function () {
    let set = new Set(this);
    return [...set];
}

方法三

遍歷兩個(gè)數(shù)組,將原數(shù)組的值和新數(shù)組的值一一進(jìn)行比較,如果原數(shù)組的值不存在則加入新數(shù)組中

Array.prototype.distinct3 = function () {
    let result = [];
    for (let i of this) {
        let flag = 0;
        for (let j of result) {
            if (i === j) {
                flag = 1;
            }
        }
        if (flag === 0) {
            result.push(i);
        }
    }
    return result;    
}

方法四

先將數(shù)組進(jìn)行排序,然后遍歷數(shù)組,將數(shù)組中每個(gè)值與其后一個(gè)值比較,如果不同則存入新數(shù)組

Array.prototype.distinct4 = function () {
    var arr = this.sort();
    var result = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] != arr[i + 1])
            result.push(arr[i]);
    }
    return result;
}

方法五

js中數(shù)組也是對(duì)象,可以根據(jù)對(duì)象屬性的特性。遍歷數(shù)組,如果該值不是對(duì)象的屬性,則在對(duì)象中添加等于該值的屬性,并且同時(shí)把該值加入新數(shù)組

Array.prototype.distinct5 = function () {
    let result = [];
    let obj = {};
    for (let x of this) {
        if (!obj[x]) {
            obj[x] = x;
            result.push(x);
        }
    }
    return result;
}

方法六

雙重循環(huán)遍歷數(shù)組,如果值相同,使用splice方法刪去后一個(gè)相同的值

Array.prototype.distinct6 = function () {
    let arr = this;
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}

以上六種方法均可以實(shí)現(xiàn)數(shù)組去重,區(qū)別是性能不同,并且有的方法會(huì)改變數(shù)組的順序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容