最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2010年01月25日 21:35:57   作者:  
巧妙去除數組中的重復項的方法參考,需要的朋友可以參考下。
可以直接使用的代碼:腳本之家修正版

下面是進階教程與說明,喜歡跟深入的朋友可以參考下。
首先讓我們看下 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));
};

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

自己使用的方式與 YUI 的方式十分相似,不過僅使用了一次循環(huán)便完成了刪除數組中重復項,如下:
復制代碼 代碼如下:

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日更新:

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

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

相關文章

  • JS一維數組轉多維數組樹的方法

    JS一維數組轉多維數組樹的方法

    這篇文章主要介紹了JS一維數組轉多維數組樹的方法,文章通過代碼示例給大家講解的非常詳細,?對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 微信小程序復選框實現(xiàn)多選一功能過程解析

    微信小程序復選框實現(xiàn)多選一功能過程解析

    這篇文章主要介紹了微信小程序復選框實現(xiàn)多選一功能過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 鼠標右擊事件代碼(asp.net后臺)

    鼠標右擊事件代碼(asp.net后臺)

    本程序由一個js文件和aspx文件組成,沒有后臺CS代碼。
    2011-01-01
  • TypeScript中的類

    TypeScript中的類

    這篇文章主要介紹了TypeScript中的類,類這個概念基本是所有面向對象編程語言都具有一個概念,JavaScript中ES6?之前是沒有類這個概念,下面文章圍繞TypeScript類的相關資料展開內容,需要的朋友可以參考一下
    2021-12-12
  • Bootstrap fileinput文件上傳預覽插件使用詳解

    Bootstrap fileinput文件上傳預覽插件使用詳解

    這篇文章主要為大家詳細介紹了Bootstrap fileinput文件上傳預覽插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 一文讓您了解document.forms和document.formName的兼容性分析

    一文讓您了解document.forms和document.formName的兼容性分析

    今天在代碼中不小心寫了兩個name相同的form表單,然后通過document.forms[formName]形式獲取到的只有第一個表單,然后深入學習了下document.forms[formName]和document.formName的區(qū)別和兼容性
    2025-03-03
  • 多瀏覽器支持的右下角浮動窗口

    多瀏覽器支持的右下角浮動窗口

    支持各種瀏覽器的右下角浮動窗口,需要的朋友可以參考下。
    2010-04-04
  • layui問題之自動滾動二級iframe頁面到指定位置的方法

    layui問題之自動滾動二級iframe頁面到指定位置的方法

    今天小編就為大家分享一篇layui問題之自動滾動二級iframe頁面到指定位置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • javascript版2048小游戲

    javascript版2048小游戲

    本文給大家分享的是使用javascript制作的2048小游戲的代碼,僅僅是想鍛煉下自己的編程代碼風格,盡量做的規(guī)范些,小伙伴們多多給些建議。
    2015-03-03
  • JavaScript實現(xiàn)雪花飄落效果

    JavaScript實現(xiàn)雪花飄落效果

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)雪花飄落效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評論

缙云县| 马鞍山市| 五原县| 龙岩市| 霍州市| 监利县| 高清| 富蕴县| 西藏| 信丰县| 嘉定区| 通化市| 墨江| 通河县| 枝江市| 偏关县| 图片| 建水县| 大厂| 沐川县| 七台河市| 通州区| 遂川县| 安陆市| 临城县| 博乐市| 仙居县| 金沙县| 二连浩特市| 东乌珠穆沁旗| 济源市| 论坛| 兰西县| 龙陵县| 定边县| 清水县| 崇仁县| 抚顺县| 安化县| 溆浦县| 新邵县|