數(shù)組去重方法

第一種是比較常規(guī)的方法

思路:

1.構(gòu)建一個新的數(shù)組存放結(jié)果

2.for循環(huán)中每次從原數(shù)組中取出一個元素,用這個元素循環(huán)與結(jié)果數(shù)組對比

3.若結(jié)果數(shù)組中沒有該元素,則存到結(jié)果數(shù)組中

Array.prototype.unique1 = function () {
    var res = [this[0]];
    for (var i = 1; i < this.length; i++) {
        var repeat = false;
        for (var j = 0; j < res.length; j++) {
            if (this[i] == res[j]) {
                repeat = true;
                break;
            }
        }
        if (!repeat) {
            res.push(this[i]);
        }
    }
    return res;
};
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0];
alert(arr.unique1());

第二種方法比上面的方法效率要高

思路:

1.先將原數(shù)組進行排序

2.檢查原數(shù)組中的第i個元素 與 結(jié)果數(shù)組中的最后一個元素是否相同,因為已經(jīng)排序,所以重復(fù)元素會在相鄰位置

3.如果不相同,則將該元素存入結(jié)果數(shù)組中

Array.prototype.unique2 = function () {
    this.sort(); //先排序
    var res = [this[0]];
    for (var i = 1; i < this.length; i++) {
        if (this[i] !== res[res.length - 1]) {
            res.push(this[i]);
        }
    }
    return res;
};
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0];
alert(arr.unique2());

第二種方法也會有一定的局限性,因為在去重前進行了排序,所以最后返回的去重結(jié)果也是排序后的。如果要求不改變數(shù)組的順序去重,那這種方法便不可取了。

第三種方法(推薦使用)

思路:

1.創(chuàng)建一個新的數(shù)組存放結(jié)果

2.創(chuàng)建一個空對象

3.for循環(huán)時,每次取出一個元素與對象進行對比,如果這個元素不重復(fù),則把它存放到結(jié)果數(shù)組中,同時把這個元素的內(nèi)容作為對象的一個屬性,并賦值為1,存入到第2步建立的對象中。

說明:至于如何對比,就是每次從原數(shù)組中取出一個元素,然后到對象中去訪問這個屬性,如果能訪問到值,則說明重復(fù)。

Array.prototype.unique3 = function () {
    var res = [];
    var json = {};
    for (var i = 0; i < this.length; i++) {
        if (!json[this[i]]) {
            res.push(this[i]);
            json[this[i]] = 1;
        }
    }
    return res;
};
var arr = [112, 112, 34, '你好', 112, 112, 34, '你好', 'str', 'str1'];
alert(arr.unique3());
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 常規(guī)方法 思路 構(gòu)建一個新的數(shù)組用來存放結(jié)果 for循環(huán)中每次從原數(shù)組取出一個元素,用這個元素循環(huán)與結(jié)果數(shù)組對比 ...
    花開半夏_NOTen閱讀 267評論 0 0
  • 一、1.構(gòu)建一個新的數(shù)組存放結(jié)果2.for循環(huán)中每次從原數(shù)組中取出一個元素,用這個元素循環(huán)與結(jié)果數(shù)組對比3.若結(jié)果...
    zhangjianli閱讀 306評論 1 1
  • 面值試中常會被問到的問題--數(shù)組去重方法,此處整理了6中方法,后續(xù)添加。1、arr.filter() 2、先排序再...
    codeholding閱讀 333評論 0 0
  • 標題其實是萬曉利唱的一首歌的名字,是我在2014年偶然聽到的,因為名字很特別,雖然很久沒有聽,但依然...
    碧甜兒閱讀 445評論 1 3
  • 社會化海量數(shù)據(jù)采集爬蟲框架搭建 | 嚴瀾(lanceyan)的博客 - 技術(shù)分享 框架交流 大數(shù)據(jù)處理 架構(gòu)搭建 ...
    葡萄喃喃囈語閱讀 587評論 0 10

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