更新時間:2020-11-02 17:43:05 來源:動力節(jié)點 瀏覽1437次
眾所周知,數(shù)組(Array)是有序的元素序列,是用于儲存多個相同類型數(shù)據(jù)的集合。我們其實從開始學習數(shù)學的時候就已經(jīng)慢慢接觸數(shù)組這一概念了,然而,在計算機語言中,數(shù)組表示把具有相同類型的若干元素按有序的形式組織起來的一種形式。在數(shù)組中,有時候難免會有重復的數(shù)據(jù),這時候就要用到數(shù)組去重了,本文我們就一起來探究一下數(shù)組去重方法。
總的來說,數(shù)組去重其實很簡單,查出數(shù)組內(nèi)的重復數(shù)據(jù),然后剔除出去,因此,數(shù)組去重方法也有很多種,但都是大同小異:
第一種是比較常規(guī)的方法
思路:
1.構建一個新的數(shù)組存放結果
2.for循環(huán)中每次從原數(shù)組中取出一個元素,用這個元素循環(huán)與結果數(shù)組對比
3.若結果數(shù)組中沒有該元素,則存到結果數(shù)組中
Array.prototype.unique1 = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique1());
第二種方法比上面的方法效率要高
思路:
1.先將原數(shù)組進行排序
2.檢查原數(shù)組中的第i個元素 與 結果數(shù)組中的最后一個元素是否相同,因為已經(jīng)排序,所以重復元素會在相鄰位置
3.如果不相同,則將該元素存入結果數(shù)組中
Array.prototype.unique2 = function(){
this.sort(); //先排序
var res = [this[0]];
for(var i = 1; i < this.length; i++){
if(this[i] !== res[res.length - 1]){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique2());
第二種方法也會有一定的局限性,因為在去重前進行了排序,所以最后返回的去重結果也是排序后的。如果要求不改變數(shù)組的順序去重,那這種方法便不可取了。
第三種方法(推薦使用)
思路:
1.創(chuàng)建一個新的數(shù)組存放結果
2.創(chuàng)建一個空對象
3.for循環(huán)時,每次取出一個元素與對象進行對比,如果這個元素不重復,則把它存放到結果數(shù)組中,同時把這個元素的內(nèi)容作為對象的一個屬性,并賦值為1,存入到第2步建立的對象中。
說明:至于如何對比,就是每次從原數(shù)組中取出一個元素,然后到對象中去訪問這個屬性,如果能訪問到值,則說明重復。
Array.prototype.unique3 = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());
第四種方法遍歷數(shù)組法
最簡單的去重方法,實現(xiàn)思路:新建一新數(shù)組,遍歷傳入數(shù)組,值不在新數(shù)組就加入該新數(shù)組中;
注意點:判斷值是否在數(shù)組的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多寫一些兼容低版本瀏覽器代碼,源碼如下:
// 最簡單數(shù)組去重法
function unique1(array){
var n = []; //一個新的臨時數(shù)組
//遍歷當前數(shù)組
for(var i = 0; i < array.length; i++){
//如果當前數(shù)組的第i已經(jīng)保存進了臨時數(shù)組,那么跳過,
//否則把當前項push到臨時數(shù)組里面
if (n.indexOf(array[i]) == -1) n.push(array[i]);
}
return n;
}
以上就是常見的幾種數(shù)組去重的方法,其實殊途同歸,最終目的還是為了剔除數(shù)組中重復的數(shù)據(jù),避免數(shù)組的數(shù)據(jù)重復性。數(shù)組在Java基礎中也算是非常重要的內(nèi)容,本文講的數(shù)組去重也只是數(shù)組眾多知識點的滄海一粟,想深入學習數(shù)組的小伙伴可以觀看本站的Java基礎教程,還有更多的挑戰(zhàn)在等著你!