課程
/前端開發
/JavaScript
/JavaScript進階篇
如何把一個數組的重復元素去掉
2016-05-13
源自:JavaScript進階篇 7-22
正在回答
常規思路:循環和 hash
循環的方法:思路就是:把數組元素搬運到另一數組,搬運過程中檢查 元素是否重復,如有,丟棄,沒有,加入。
方法一:雖然是循環,但是效率還可以。思路是 把一個數組搬運到另一新數組,比較 要搬運的數組元素 與 新數組元素的最后一個,看是否相同。
Array.prototype.delRepeat1=function(){ //先排序,因為這個方法只是對比?兩個元素,n的最后一個元素?與?this[i] ????this.sort(); ????var?n=[this[0]]; ????for(var?i=1;i<this.length;i++){ ????//注意JS是若類型語言,避免?123?與?"123"?判斷為相等,所以此處用?!== ?????????if(this[i]!==?n[n.length?-1])?{ ?????????//這一句?用?n[n.length]不行的,原因,我也不知道,希望以后探討?。?! ?????????????n.push(this[i]); ?????????}? ????} ????return?n; }
方法二:還是循環,這個效率低,因為indexOf()會從頭檢查數組元素,效率不行
具體思路差不多,復制數組時 進行比較,檢查新數組中是否存在 要插入的那個數組元素
Array.prototype.delRepeat2=function(){ //一個新的臨時數組 ????var?n=[]; ????for(var?i=0;i<this.length;i++){ ????//?-1?表示n中沒有此元素,則把this[i]加入n中 ????????if(n.indexOf(this[i])==-1) ????????????n.push(this[i]); ????} ????return?n; }
方法三:用indexOf()的另一種方法
Array.prototype.delRepeat3=function(){ ????var?n=this[0]; ????//對原有數組判斷,如果第一次出現的位置與序列號相同,則沒有重復,否則有重復 ????for(var?i=1;i<this.length;i++){ ????????if(this.indexOf(this[i])==i)?{ ?????????????n.push(this[i]); ?????????} ????} ????return?n; }
方法四 hash 這個方法看起來會高級一點
Array.prototype.delRepeate4?=?function(){ //n為hash表,r為臨時數組 ????var?n={},r=[]; ????for(var?i=0;i<this.length;i++){ ????//如果hash表中沒有當前項 ????????if(!n[this[i]]){ ????????//存入hash表中 ????????????n[this[i]]?=true; ????????????//把當前數組的當前項push到臨時數組中 ????????????r.push(this[i]); ????????} ????} ????return?r; }
咸魚有夢
for(var i=0; i<arr.length; i++){
? ? for(var j=i+1; j<arr.length; j++){
? ? ? ? if(arr[i]==arr[j]){
? ? ? ? ? ?arr.splice(j,1);
? ? ? ? ? ?j--;
? ? ? ? } ??
? ? }
}
var arr = ["1","2", "3","4","5","2","3","8","9","10","11"]var.length;var num=[];for(var i=0; i<lang; i++){??? for(var j=i+1; j<lang; j++){??????? if(arr[i]==arr[j]){??????????? num.push(j)??????? }? ???? }}for(var i=num.length-1; i>=0; i--){?? ?arr.splice(num[i],1)}
感覺應該還有更簡便的方法.- -。我是新手-只能寫到這..
舉報
本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界
1 回答如何向數組的開頭插入元素呢?
2 回答數組的長度和第一個元素
5 回答數組長度和數組元素個數的問題
2 回答數組里面的元素
4 回答數組添加元素
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-05-13
常規思路:循環和 hash
循環的方法:思路就是:把數組元素搬運到另一數組,搬運過程中檢查 元素是否重復,如有,丟棄,沒有,加入。
方法一:雖然是循環,但是效率還可以。思路是 把一個數組搬運到另一新數組,比較 要搬運的數組元素 與 新數組元素的最后一個,看是否相同。
方法二:還是循環,這個效率低,因為indexOf()會從頭檢查數組元素,效率不行
具體思路差不多,復制數組時 進行比較,檢查新數組中是否存在 要插入的那個數組元素
方法三:用indexOf()的另一種方法
方法四 hash 這個方法看起來會高級一點
2016-05-13
? ? ?for (var i = 0; i < arr.length; i++) {
? ? ? ? ?isRepeated = false;
? ? ? ? ?for (var j = 0; j < result.length; j++) {
? ? ? ? ? ? ?if (arr[i] == result[j]) { ?
? ? ? ? ? ? ? ? ?isRepeated = true;
? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ?}
? ? ? ? }
? ? ? ? if (!isRepeated) {
? ? ? ? ? ? result.push(arr[i]);
? ? ? ? }
? ? }
2016-05-13
for(var i=0; i<arr.length; i++){
? ? for(var j=i+1; j<arr.length; j++){
? ? ? ? if(arr[i]==arr[j]){
? ? ? ? ? ?arr.splice(j,1);
? ? ? ? ? ?j--;
? ? ? ? } ??
? ? }
}
2016-05-13
var arr = ["1","2", "3","4","5","2","3","8","9","10","11"]
var.length;
var num=[];
for(var i=0; i<lang; i++){
??? for(var j=i+1; j<lang; j++){
??????? if(arr[i]==arr[j]){
??????????? num.push(j)
??????? }? ?
??? }
}
for(var i=num.length-1; i>=0; i--){
?? ?arr.splice(num[i],1)
}
感覺應該還有更簡便的方法.- -。我是新手-只能寫到這..