js jquery數組去重


 

 

數組去重建議直接使用jquery的 $.unique(arr);方法,此外比較好的方法是本文中的unique3方法比較快用了一個hash表,就是所謂的空間換時間。本文還提供了很多其他寫法,都是大同小異.

 

            // $.unique(arr)推薦
       var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("jq-unique(): " + $.unique(arr) + "</br>"); // 1,a,2,b,3,c    // 使用$.inArray(arr[i], new_arr),判斷是否在新數組中 var jqUnique3 = function(arr) { var new_arr = []; // 定義一個空數組,用來存放最后篩選出來的元素 for(var i = 0; i < arr.length; i++) {   if($.inArray(arr[i], new_arr) == -1) { // jQuery.inArray()函數用於在數組中搜索指定的值,並返回其索引值。如果數組中不存在該值,則返回 -1。 new_arr.push(arr[i]); // 不存在則插入到new_arr的最后      } } return new_arr; } var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("jq-unique3(): " + jqUnique3(arr) + "</br>"); // 1,a,2,b,3,c // 設置標志位 Array.prototype.unique1 = function() { var new_arr = [this[0]]; // 構建一個新的數組存放結果 for(var i = 1; i < this.length; i++) { var repeat = false; for(var j = 0; j < new_arr.length; j++) { if(this[i] == new_arr[j]) { // for循環中每次從原數組中取出一個元素,用這個元素循環與結果數組對比 repeat = true; break; } } if(!repeat) { new_arr.push(this[i]); // 若結果數組中沒有該元素,則存到結果數組中 } } return new_arr; } var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("js-unique1(): " + arr.unique1() + "</br>"); // 1,a,2,b,3,c // 先排序再判斷 // 有一定的局限性,因為在去重前進行了排序,所以最后返回的去重結果也是排序后的。如果要求不改變數組的順序去重,那這種方法便不可取了。 Array.prototype.unique2 = function() { this.sort(); // 先將原數組進行排序 var new_arr = [this[0]]; for(var i = 1; i < this.length; i++) { if(this[i] !== new_arr[new_arr.length - 1]) { // 檢查原數組中的第i個元素 與 結果數組中的最后一個元素是否相同,因為已經排序,所以重復元素會在相鄰位置 new_arr.push(this[i]); // 如果不相同,則將該元素存入結果數組中 } } return new_arr; } var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("js-unique2(): " + arr.unique2() + "</br>"); // 1,2,3,a,b,c // 使用Hash表,推薦 Array.prototype.unique3 = function() { var new_arr = []; // 創建一個新的數組存放結果 var json = {}; // 創建一個空對象 for(var i = 0; i < this.length; i++) { // for循環時,每次取出一個元素與對象進行對比,如果這個元素不重復,則把它存放到結果數組中,同時把這個元素的內容作為對象的一個屬性,並賦值為1,存入到第2步建立的對象中。 if(!json[this[i]]) { new_arr.push(this[i]); json[this[i]] = true; } } return new_arr; } var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("js-unique3(): " + arr.unique3() + "</br>"); // 1,a,2,b,3,c // indexOf 判斷新數組中是否已存在 Array.prototype.unique4 = function() { var new_arr = []; //一個新的臨時數組 for(var i = 0; i < this.length; i++) //遍歷當前數組 { //如果當前數組的第i已經保存進了臨時數組,那么跳過, //否則把當前項push到臨時數組里面 if(new_arr.indexOf(this[i]) == -1) new_arr.push(this[i]); } return new_arr; } var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("js-unique4(): " + arr.unique4() + "</br>"); // 1,a,2,b,3,c // indexOf 判斷當前數組的第i項在當前數組中第一次出現的位置是不是i Array.prototype.unique5 = function() { var new_arr = [this[0]]; //結果數組 for(var i = 1; i < this.length; i++) //從第二項開始遍歷 { //如果當前數組的第i項在當前數組中第一次出現的位置不是i, //那么表示第i項是重復的,忽略掉。否則存入結果數組 if(this.indexOf(this[i]) == i) new_arr.push(this[i]); } return new_arr; } var arr = [1, 'a', 2, 'b', 'b', 3, 'c', 'c', 'c']; document.write("js-unique5(): " + arr.unique5() + "</br>"); // 1,a,2,b,3,c

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM