一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

刪除數(shù)組中重復(fù)項(xiàng)(uniq)

 maoj66 2012-10-29

首先讓我們看下 YUI 是如何處理的:

var toObject = function(a) {
   
var o = {};
   
for (var i = 0; i < a.length; i = i+1) {
     o
[a[i]] = true;
   
}
   
return o;
};

var keys = function(o) {
   
var a=[], i;
   
for (i in o) {
       
if (lang.hasOwnProperty(o, i)) { // YUI的方法
            a
.push(i);
       
}
   
}
   
return a;
};

var uniq = function(a) {
   
return keys(toObject(a));
};

詳細(xì)分析,見(jiàn)同事 長(zhǎng)天 的分享 《巧妙去除數(shù)組中的重復(fù)項(xiàng)》

自己使用的方式與 YUI 的方式十分相似,不過(guò)僅使用了一次循環(huán)便完成了刪除數(shù)組中重復(fù)項(xiàng),如下:

var uniq = function (arr) {
   
var a = [],
        o
= {},
        i
,
        v
,
        len
= arr.length;

   
if (len < 2) {
       
return arr;
   
}

   
for (i = 0; i < len; i++) {
        v
= arr[i];
       
if (o[v] !== 1) {
            a
.push(v);
            o
[v] = 1;
       
}
   
}

   
return a;
}

經(jīng)過(guò)了簡(jiǎn)單的測(cè)試:自己使用的方式性能遠(yuǎn)遠(yuǎn)高于 YUI 的方式。

拋磚引玉,歡迎大家提供更好的處理方法。

2009年12月28日更新:

以上兩種函數(shù)方法暫時(shí)都不能處理復(fù)雜的含有混合類(lèi)型的數(shù)組(感謝 小貓 提出的疑問(wèn)),如:[0,"0",1,"1",0]、["null",null]。

對(duì)于能夠約定類(lèi)型為數(shù)字(注:要求非0開(kāi)頭的數(shù)字,小數(shù)除外)或字符串的數(shù)組,我們可以用改進(jìn)后的函數(shù)方法(感謝 closurecache 提供的思路):

var uniq = function (arr) {
   
var a = [],
        o
= {},
        i
,
        v
,
        cv
, // corrected value
        len
= arr.length;

   
if (len < 2) {
       
return arr;
   
}

   
for (i = 0; i < len; i++) {
        v
= arr[i];

       
/* closurecache 提供的函數(shù)中使用的是  cv = v + 0;,
         * 這樣就無(wú)法辨別類(lèi)似[1, 10, "1", "10"]的數(shù)組,
         * 因?yàn)檫\(yùn)算后 => 1, 10, 10, 100,很明顯,出現(xiàn)了重復(fù)的標(biāo)示符。
         * 加前面就難道沒(méi)問(wèn)題嗎?
         * 有的:數(shù)組中不能出現(xiàn)類(lèi)似01 、001,以 0 開(kāi)頭的數(shù)字,
         * 但適用性比原先更廣。
         */

        cv
= 0 + v;

       
if (!o[cv]) {
            a
.push(v);
            o
[cv] = true;
       
}
   
}

   
return a;
}

如果大家想在此解題思路的基礎(chǔ)上,更完美一點(diǎn),推薦 Dexter.Yy 的方法,進(jìn)行類(lèi)型判斷,給予唯一標(biāo)示符,詳見(jiàn) 評(píng)論 20 樓

沒(méi)有最好,只有最合適的方式,其實(shí)使用 Array.indexOf() 的思路也是不錯(cuò)的選擇,對(duì)于已經(jīng)支持的瀏覽器直接用原生的 Array.indexOf() 方法,對(duì)于未支持的,我們?cè)黾?Array.indexOf() 方法,如下:

if(!Array.prototype.indexOf) {
   
Array.prototype.indexOf = function (obj, fromIndex) {
       
if (fromIndex == null) {
            fromIndex
= 0;
       
} else if (fromIndex < 0) {
            fromIndex
= Math.max(0, this.length + fromIndex);
       
}

       
for (var i = fromIndex; i < this.length; i++) {
           
if (this[i] === obj)
               
return i;
           
}
       
return -1;
   
};
}

接下來(lái),實(shí)現(xiàn)的過(guò)程就非常簡(jiǎn)單了。

對(duì)于使用 Array.indexOf() 方法實(shí)現(xiàn)方案的優(yōu)化提示:找到相同值時(shí),從數(shù)組中移除,以減少下次遍歷的量。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    99视频精品免费视频播放| 日本免费一区二区三女| 日韩性生活视频免费在线观看| 麻豆剧果冻传媒一二三区| 一区二区日本一区二区欧美| 九九热国产这里只有精品| 成人国产激情福利久久| 中文字幕一区二区免费| 精品女同在线一区二区| 日韩免费av一区二区三区| 国产高清在线不卡一区| 欧美成人黄色一级视频| 色哟哟精品一区二区三区| 中文字幕精品人妻一区| 超薄肉色丝袜脚一区二区| 日本欧美一区二区三区就| 亚洲欧美日韩熟女第一页| 99久久无色码中文字幕免费| 在线观看免费午夜福利| 精品高清美女精品国产区| 美女被草的视频在线观看| 国产又大又硬又粗又湿| 爱在午夜降临前在线观看| 欧美精品在线播放一区二区| 欧美成人国产精品高清| 国产一区二区不卡在线播放| 亚洲国产色婷婷久久精品| 一区二区三区亚洲国产| 免费观看日韩一级黄色大片| 亚洲中文字幕熟女丝袜久久| 国产精品久久久久久久久久久痴汉| 好吊妞视频免费在线观看| 国产精品福利精品福利| 国产一区二区三区四区免费| 男人操女人下面国产剧情| 亚洲一区二区三区三州| 视频在线播放你懂的一区| 中文字幕高清免费日韩视频| 日本午夜免费啪视频在线| 日韩黄色一级片免费收看| 国产av乱了乱了一区二区三区|