亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS去除數組重復值的五種不同方法

2019-11-20 22:19:35
字體:
來源:轉載
供稿:網友

今天工作遇到此問題,嘗試多個方法不盡人意,故此寫個博客來總結一下如何在js中去除重復元素。

Array類型并沒有提供去重復的方法,如果要把數組的重復元素干掉,那得自己想辦法:

方法1:

  Array.prototype.method1 = function(){       var arr[];  //定義一個臨時數組       for(var i = 0; i < this.length; i++){  //循環遍歷當前數組         //判斷當前數組下標為i的元素是否已經保存到臨時數組         //如果已保存,則跳過,否則將此元素保存到臨時數組中         if(arr1.indexOf(this[i]) == -1){           arr.push(this[i]);         }       }       return arr;     }

方法2:

Array.prototype.method2 = function(){       var h{};  //定義一個hash表       var arr[]; //定義一個臨時數組              for(var i = 0; i < this.length; i++){  //循環遍歷當前數組         //對元素進行判斷,看是否已經存在表中,如果存在則跳過,否則存入臨時數組         if(!h[this[i]]){           //存入hash表           h[this[i]] = true;           //把當前數組元素存入到臨時數組中           arr.push(this[i]);         }       }       return arr;     } 

方法3:

Array.prototype.method3 = function(){       //直接定義結果數組       var arr[this[0]];       for(var i = 1; i < this.length; i++){  //從數組第二項開始循環遍歷此數組         //對元素進行判斷:         //如果數組當前元素在此數組中第一次出現的位置不是i         //那么我們可以判斷第i項元素是重復的,否則直接存入結果數組         if(this.indexOf(this[i]) == i){           arr.push(this[i]);         }       }       return arr;          } 

方法4:

Array.prototype.method4 = function(){       //將數組進行排序       this.sort();       //定義結果數組       var arr[this[0]];       for(var i = 1; i < this.length; i++){  //從數組第二項開始循環遍歷數組         //判斷相鄰兩個元素是否相等,如果相等說明數據重復,否則將元素寫入結果數組         if(this[i] !== arr[arr.length - 1]){           arr.push(this[i]);         }             }       return arr;            } 

例如:

 var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];     alert(arr.method3()); 

方法1和方法3都用到了數組的indexOf()方法,此方法主要用來查找元素在數組中第一次出現的位置。比較浪費資源和時間。
方法2使用的是hash表,把已經出現過的元素通過下標形式寫入到一個object內,下標的引用要比用數組indexOf()方法搜索節省時間。
方法4是先將數組排序,然后一次比較相鄰的兩個元素的值,排序使用的是js原生的sort()方法。
讀者可以自行編寫程序測試四種方法的效率如何。例如:首先利用隨機函數生成一個50000長度的隨機數數組,然后分別用四種方法進行執行,記錄程序運行時間進行比較四種方法的優劣。

方法五、個人比較喜歡的一個函數

function unique(arr) {  var result = [], isRepeated;  for (var i = 0, len = arr.length; i < len; i++) {    isRepeated = false;    for (var j = 0, len = result.length; j < len; j++) {      if (arr[i] == result[j]) {          isRepeated = true;        break;      }    }    if (!isRepeated) {      result.push(arr[i]);    }  }  return result;}

總體思路是把數組元素逐個搬運到另一個數組,搬運的過程中檢查這個元素是否有重復,如果有就直接丟掉。從嵌套循環就可以看出,這種方法效率極低。我們可以 用一個hashtable的結構記錄已有的元素,這樣就可以避免內層循環。恰好,在Javascript中實現hashtable是極為簡單的,改進如下:

function unique(arr) {  var result = [], hash = {};  for (var i = 0, elem; (elem = arr[i]) != null; i++) {    if (!hash[elem]) {      result.push(elem);      hash[elem] = true;    }  }  return result;}

完整測試代碼

<script>var h_hewenqiArray = new Array();h_hewenqiArray[0] = "VeVB.COm";h_hewenqiArray[1] = "easysector";h_hewenqiArray[2] = "VeVB.COm";h_hewenqiArray[3] = "keleyi";h_hewenqiArray[4] = "keleyi";h_hewenqiArray[5] = "武林網";h_hewenqiArray[6] = "VeVB.COm";h_hewenqiArray[7] = "hoverclock";h_hewenqiArray[8] = "yestop";h_hewenqiArray[9] = 163;h_hewenqiArray[10] = "武林網";h_hewenqiArray[11] = 163;h_hewenqiArray[12] = "hoverclock";h_hewenqiArray[13] = "武林網";var h_arrayLength = h_hewenqiArray.length;document.write("原始數組元素個數:"+h_arrayLength + "<br />");for (var i = 0; i < h_arrayLength; i++){document.write(h_hewenqiArray[i]+"<br />");}function hovercUnique(arr) {var result = [], hash = {};for (var i = 0, elem; (elem = arr[i]) != null; i++) {if (!hash[elem]) {result.push(elem);hash[elem] = true;}}return result;//http://VeVB.COm.com}var h_hewenqiResult = hovercUnique(h_hewenqiArray);var h_resultLength = h_hewenqiResult.length;document.write("<br />去重復后數組元素個數:" + h_resultLength + "<br />");for (var i = 0; i < h_resultLength; i++) {document.write(h_hewenqiResult[i] + "<br />");} </script>

以下是其它網友的補充

復制代碼 代碼如下:

/// <summary>2 /// 回車鍵按鈕事件(此方法需要在頁面加載完后執行,比如在Jquery中的ready中調用)--方法一
/// </summary>
/// 調用示例:
/// var v_Array = new Array(1, 2, 3, 4, 5, 6, 7, 3, 3, 2, 2, 4, 2, 1, 1, 3);
/// var v_ArrayResult = v_Array.deleteEle();
/// alert(v_ArrayResult); //返回結果:, 2, 3, 4, 5, 6, 7
Array.prototype.deleteEle = function () {
var o = {}, newArr = [], i, j;
for (i = 0; i < this.length; i++) {
if (typeof (o[this[i]]) == "undefined") {
o[this[i]] = "";
}
}
for (j in o) {
newArr.push(j)
}
return newArr;
}
/// <summary>
/// 回車鍵按鈕事件(此方法需要在頁面加載完后執行,比如在Jquery中的ready中調用)--方法二
/// </summary>
/// 調用示例:
/// var v_Array = new Array(1, 2, 3, 4, 5, 6, 7, 3, 3, 2, 2, 4, 2, 1, 1, 3);
/// var v_ArrayResult = v_Array.deleteEleReg();
/// alert(v_ArrayResult); //返回結果:, 2, 3, 4, 5, 6, 7
Array.prototype.deleteEleReg = function () {
return this.reverse().join(",").match(/([^,]+)(?!.*/1)/ig).reverse();
}
/// <summary>
/// 回車鍵按鈕事件(此方法需要在頁面加載完后執行,比如在Jquery中的ready中調用)--方法三
/// </summary>
/// <param name="array">數組</param>
/// 調用示例:
/// var v_Array = new Array(1, 2, 3, 4, 5, 6, 7, 3, 3, 2, 2, 4, 2, 1, 1, 3);
/// alert(unique(v_Array)); //返回結果:, 2, 3, 4, 5, 6, 7
function deleteEleFunction(array) {
var ret = [], record = {}, it, tmp, obj = "__object__", bak = [], i, len;
var type = {
"number": function (n) { return "__number__" + n; },
"string": function (n) { return "__string__" + n; },
"boolean": function (n) { return "__boolean__" + n; },
"undefined": function (n) { return "__undefined__"; },
"object": function (n) {
return n === null ? "__null__" : obj in n ? n[obj] : (n[obj] = obj + bak.push(n));
}
};
for (i = 0, len = array.length; i < len; i++) {
it = array[i]; tmp = type[typeof it](it);
if (!(tmp in record)) { ret.push(it); record[tmp] = true; }
}
for (i = 0, len = bak.length; i < len; delete bak[i++][obj]) { }
return ret;
};

/// <summary>< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
/// 回車鍵按鈕事件(此方法需要在頁面加載完后執行,比如在Jquery中的ready中調用)--方法四
/// </summary>
/// 調用示例:
/// var v_Array = new Array(1, 2, 3, 4, 5, 6, 7, 3, 3, 2, 2, 4, 2, 1, 1, 3);
/// var v_ArrayResult = v_Array.deleteEleDis();
/// alert(v_ArrayResult); //返回結果:, 2, 3, 4, 5, 6, 7
Array.prototype.deleteEleDis = function () {
var a = [], b = [];
for (var prop in this) {
var d = this[prop];
if (d === a[prop]) continue; //防止循環到prototype
if (b[d] != 1) {
a.push(d);
b[d] = 1;
}
}
return a;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91视频国产高清| 性夜试看影院91社区| 久久精品视频99| 一区二区在线视频播放| 亚洲欧美另类国产| 国产成人高清激情视频在线观看| 久久亚洲私人国产精品va| 欧美成人免费va影院高清| 91精品久久久久久久久| 97超碰蝌蚪网人人做人人爽| 欧美日韩一区二区免费在线观看| 亚洲精品99久久久久中文字幕| 国产精品夫妻激情| 久久婷婷国产麻豆91天堂| 亚洲专区在线视频| 中文字幕一区二区精品| 亚洲欧美在线一区| 性金发美女69hd大尺寸| 92裸体在线视频网站| 琪琪第一精品导航| 亚洲热线99精品视频| 国产精品亚洲片夜色在线| 欧美大片免费观看在线观看网站推荐| 久久在线视频在线| 久久99青青精品免费观看| 久久久久久久久久久人体| 欧美激情第一页xxx| 欧美日韩成人在线播放| 精品成人av一区| 亚洲欧美国产精品久久久久久久| 午夜精品免费视频| 欧美日产国产成人免费图片| 国产精品久久一区| 成人黄色免费在线观看| 中文字幕亚洲图片| 91在线免费网站| 永久免费看mv网站入口亚洲| 亚洲奶大毛多的老太婆| 欧美成人精品h版在线观看| 欧美亚洲国产日韩2020| 91欧美精品午夜性色福利在线| 夜夜嗨av一区二区三区免费区| 国产亚洲日本欧美韩国| 欧美亚洲一区在线| 日日骚久久av| 国产国语刺激对白av不卡| 欧美激情在线视频二区| 久久夜色精品国产欧美乱| 91精品国产91久久久久久久久| 色综合天天综合网国产成人网| 久久亚洲精品网站| 91免费看片在线| 欧美性猛交xxxx乱大交极品| 一区二区欧美在线| 色无极亚洲影院| 精品久久久久久久久久久| 日本国产欧美一区二区三区| 久久久999精品视频| 久久久99久久精品女同性| 欧美成aaa人片在线观看蜜臀| xxxxx成人.com| 国产精品高潮呻吟久久av野狼| 久久这里有精品| 久久亚洲春色中文字幕| 欧美性猛交xxxx免费看久久久| 日韩中文视频免费在线观看| 欧美日韩国产区| 欧美理论电影在线播放| 亚洲福利影片在线| 亚洲色在线视频| 深夜精品寂寞黄网站在线观看| 国产色婷婷国产综合在线理论片a| 欧美高清视频一区二区| 欧美大片免费观看| 国产亚洲精品va在线观看| 久久久久国产一区二区三区| 国产+成+人+亚洲欧洲| 久久久久久久一区二区| 久久精品国产96久久久香蕉| 欧美与黑人午夜性猛交久久久| 久久九九全国免费精品观看| 91伊人影院在线播放| 国产一区二区成人| 欧美成人高清视频| 欧美激情亚洲激情| 欧美日韩在线第一页| 久久av红桃一区二区小说| 在线成人激情黄色| 亚洲丝袜av一区| 中文字幕欧美精品在线| 欧美激情一区二区三区在线视频观看| 中文字幕精品在线视频| 亚洲伊人一本大道中文字幕| 色妞久久福利网| 欧美激情三级免费| 欧美日韩高清在线观看| 日韩成人av在线| 欧美第一黄网免费网站| 国产精品视频1区| 日日狠狠久久偷偷四色综合免费| 九九热最新视频//这里只有精品| 国产欧美精品一区二区| 国产精品一区二区三区免费视频| 欧美一区三区三区高中清蜜桃| 欧美高跟鞋交xxxxxhd| 亚洲影视九九影院在线观看| 国产精品高潮粉嫩av| 欧美激情手机在线视频| 亚洲精品一区在线观看香蕉| 国模吧一区二区三区| 色多多国产成人永久免费网站| 亚洲视频在线观看网站| 精品久久久久久久久久久久| 美女撒尿一区二区三区| 久久精品国产亚洲精品2020| 亚洲天堂男人天堂| 欧美成人黄色小视频| 成人精品视频久久久久| 成人欧美一区二区三区黑人| 亚洲精品色婷婷福利天堂| www欧美xxxx| 美女久久久久久久久久久| 国产精品高精视频免费| 最新日韩中文字幕| 成人h视频在线| 国产日韩综合一区二区性色av| 国产精品网红福利| 亚洲精品成人免费| 中文精品99久久国产香蕉| 成人免费视频xnxx.com| 亚洲影院色在线观看免费| 亚洲精品欧美一区二区三区| 亚洲福利小视频| 欧美老少配视频| 国产xxx69麻豆国语对白| 中文字幕亚洲情99在线| 国产最新精品视频| 国产91精品久| 久久精品久久精品亚洲人| 91免费看视频.| 亚洲少妇中文在线| 中文字幕亚洲综合| 欧美性猛交xxxx久久久| 亚洲老头老太hd| 日韩性生活视频| 一个人看的www久久| 欧美午夜精品伦理| 精品视频在线播放色网色视频| 狠狠综合久久av一区二区小说| 亚洲黄色片网站| 国产精品18久久久久久麻辣| 日韩中文在线中文网在线观看| 亚洲免费av电影| 欧美成人精品在线观看| 中文字幕国产精品久久| 性夜试看影院91社区| 国产极品精品在线观看| 最新69国产成人精品视频免费| 亚洲精品一二区| 国产精品永久免费在线| 日韩av理论片| 中日韩午夜理伦电影免费| 国产精品爽黄69天堂a| 国产国语videosex另类|