天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

javascript 刪除數(shù)組中重復項(uniq)

可以直接使用的代碼:腳本之家修正版

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
下面是進階教程與說明,喜歡跟深入的朋友可以參考下。
首先讓我們看下 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));
};

詳細分析,見同事 長天 的分享 《巧妙去除數(shù)組中的重復項》。

自己使用的方式與 YUI 的方式十分相似,不過僅使用了一次循環(huán)便完成了刪除數(shù)組中重復項,如下:
復制代碼 代碼如下:
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;
}

經過了簡單的測試:自己使用的方式性能遠遠高于 YUI 的方式。

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

2009年12月28日更新:

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

對于能夠約定類型為數(shù)字(注:要求非0開頭的數(shù)字,小數(shù)除外)或字符串的數(shù)組,我們可以用改進后的函數(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;,
* 這樣就無法辨別類似[1, 10, "1", "10"]的數(shù)組,
* 因為運算后 => 1, 10, 10, 100,很明顯,出現(xiàn)了重復的標示符。
* 加前面就難道沒問題嗎?
* 有的:數(shù)組中不能出現(xiàn)類似01 、001,以 0 開頭的數(shù)字,
* 但適用性比原先更廣。
*/
cv = 0 + v;

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

return a;
}

如果大家想在此解題思路的基礎上,更完美一點,推薦 Dexter.Yy 的方法,進行類型判斷,給予唯一標示符,詳見 評論 20 樓。

沒有最好,只有最合適的方式,其實使用 Array.indexOf() 的思路也是不錯的選擇,對于已經支持的瀏覽器直接用原生的 Array.indexOf() 方法,對于未支持的,我們增加 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;
};
}

接下來,實現(xiàn)的過程就非常簡單了。

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

JavaScript技術javascript 刪除數(shù)組中重復項(uniq),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 美女被爆插 | 免费国产精品视频 | 天天日免费观看视频一1 | 亚洲精品免费在线 | 他揉捏她两乳不停呻吟口述 | 校花被扒衣吸乳羞羞漫画 | 国产乱码精品AAAAAAAA | 夜夜躁婷婷AV蜜桃视频 | 色欲AV亚洲午夜精品无码 | 国产人成无码视频在线观看 | 国产毛片视频网站 | 乌克兰粉嫩摘花第一次 | 国产精品自在在线午夜精品 | 神马影院在线eecss伦理片 | 日韩精品一区VR观看 | 久久AV国产麻豆HD真实 | 一个人视频日本在线观看 | 久久久久琪琪精品色 | 欧美卡1卡2卡三卡2021精品 | 91免费网站在线看入口黄 | 久久91精品国产91 | 国产亚洲精品视频亚洲香蕉视 | 久青草国产在线视频 | 饥渴难耐的浪荡艳妇在线观看 | 亚洲欧美日本久久综合网站 | 欧美亚洲日韩国产在线在线 | 69国产精品成人无码视频 | 欧美丰满熟妇BBB久久久 | 2019久久这里只精品热在线观看 | 亚洲 天堂 欧美 日韩 国产 | 伊人影院综合在线 | 男女性杂交内射妇女BBWXZ | 浴室里强摁做开腿呻吟的漫画男男 | 久久精品动漫99精品动漫 | 国产欧美日韩精品a在线观看高清 | 久久99热狠狠色AV蜜臀 | 99精品免费久久久久久久久蜜桃 | 亚洲视频精品在线观看 | 国产成人精品免费视频下载 | 亚洲精品中文字幕无码A片蜜桃 | 青柠在线电影高清免费观看 |