js數組和數組去重的幾種簡單的方法


http://blog.csdn.net/liangklfang/article/details/49300417

 1.證明一個對象是數組的方法。

方法(1)

[].constructor === Array
true
[].constructor === 'Array'
false

方法(2)

Object.prototype.toString.call([]) == "[object Array]"

以下數js數組去重。==========================================================

先看博客:http://www.itnose.net/detail/6392462.html

這里有一個hash的方法:http://www.itnose.net/detail/6431264.html

第一種遍歷方法:

a.是檢測新數組newArr里有沒有包含Arr里的i項,如果沒有則向newArr里添加Aii[i]項,如果有則跳過;不做任何操作。

var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];  
function unArray (Arr) {
var newArr = [];
for (var i = 0; i < Arr.length; i++) {
if (newArr.indexOf(Arr[i]) == -1){//檢測newArr數組里是否包含Arr數組的內容,==-1檢索的字符串沒有出現則為-1
newArr.push(Arr[i])//把Arr數組的第i項插入新數組
}
};
return newArr;
}
unArray(Arr);
//console.log(unArray(Arr));

b.是在Arr數組里檢測,Arr.indexOf(Arr[i])返回某一項在Arr數組里第一次出現的位置,如果第一次出現就push到newArr數組去,如果第二次出現,則什么都不操作。

var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
var newArr = [Arr[0]];
for (var i = 1; i < Arr.length; i++) {
if (Arr.indexOf(Arr[i]) == i){//檢測Arr數組第一次出現的位置是i
newArr.push(Arr[i])//把Arr數組的第i項插入新數組newArr
}
};
return newArr;//返回新數組newArr
}
unArray(Arr);
//console.log(unArray(Arr));

第二種方法:

排序后相鄰去除法(這種排序有序局,有些不是數字的數組是無法進行排序的。)

 思路:先將數組經過sort排序,這時候相同的元素處於相鄰的位置,所以在便利數組的時候我們只將與前一值不重復的值

 function unique(array){
var reArr=[array[0]];
var len=array.length;
array.sort();
for(var i=1;i<len;i++){
if(array[i]!=reArr[reArr.length-1]){//注意這里
reArr.push(array[i]);
}
}
return reArr;
}

第三種方法:

對象鍵值對法

思路:新建一js對象json以及新數組reArr,遍歷數組元素是否為json的鍵,不是則創建,是則判斷元素的類型在鍵對應的值中是否存在。

   function unique(array){
var json = {}, reArr = [], len = array.length, val, type;
for (var i = 0; i < len ; i++) {
val = array[i];
type = Object.prototype.toString.call(val);
if (!json[val]) {//如果鍵對應的值不存在則是第一次存取
json[val] = [type];//設置該鍵為數組,並賦值元素類型
reArr.push(val);//往reArr中添加元素
} else if (json[val].indexOf(type) < 0) {
json[val].push(type);
reArr.push(val);
}
}
return reArr;
}
//該方法有bug,當有多個{}時,只能保存一個{}

第四種方法:

個人感覺第三種沒有什么鳥用。

Array.from(new Set([3,2,20,45,12,20]))

第五種方法:

[...new Set([3,2,20,45,12,20])]

我認為這是屬於去重的最簡單的一種方式了。

=============

Js類數組轉數組的方法。

http://www.jianshu.com/p/f8466e83cef0 

Array.prototype.slice.call(arrayLike)

這里有一篇博客:

這里的話,我們必須先http://www.jb51.net/article/46154.htm

這里邊推薦的第三種方法。

关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com