js數組遍歷的方法

第一種:

for循環 :

var arr = ["a", "b", "c"];
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

這種方法每循環一次就必須檢查一下數組長度,所以我們可以對其進行優化一下。

var arr = ["a", "b", "c"];
var length = arr.length;
for (var i = 0; i < length; i++) {
    console.log(arr[i]);
}

這樣就可以減少讀取長度的時間,但是如果不用判斷終止條件,就會變得更快了

var arr = ["a", "b", "c"];
var i = arr.length;
while(i--){
    console.log(arr[i]);
}

第二種:

for-in 循環:

var arr = ["a", "b", "c"];
var arr1 = {
    name : 'ly',
    age : 20,
};
for (var obj in arr1) {
    console.log(arr1[obj]);
    console.log(obj);
}
for (var i in arr) {
    console.log(arr[i]);
    console.log(i);
}

裏面的obj實際上就是name,age,i就爲arr的索引值,對應於arr的下標。for-in 需要分析出arr1 的每個屬性,這個操作性能開銷很大。用在 key 已知的數組上是非常不划算的。所以儘量不要用 for-in,除非你不清楚要處理哪些屬性,例如 JSON 對象這樣的情況。

第三種:

forEach:數組自帶的foreach循環,使用頻率較高,實際上性能比普通for循環弱

var arr = ["a", "b", "c"];
arr.forEach(
    function demo(item,count) {
        console.log(item + " " + count);
    }
);

forEach 無法遍歷對象;
forEach 無法使用 break,continue 跳出循環,且使用 return 是跳過本次循環;
可以添加第二個參數,爲一個數組,回調中的 this 會指向這個數組,若沒有添加,則是指向 window;

forEach變種:由於foreach是Array型自帶的,對於一些非這種類型的,無法直接使用(如NodeList),所以纔有了這個變種,使用這個變種可以讓類似的數組擁有foreach功能。

Array.prototype.forEach.call(arr,function(el){  

});

第四種:

for-of:先說一下for-in和for-of的區別。
遍歷Array可以採用下標循環,遍歷Map和Set就無法使用下標。Map,set–無下標,無法使用索引進行遍歷
爲了統一集合類型,ES6標準引入了新的iterable類型,
Array、Map和Set都屬於iterable類型。
==具有iterable類型的集合可以通過新的for … of循環來遍歷。==
一個Array數組實際上也是一個對象,它的每個元素的索引被視爲一個屬性。for in 遍歷數組時會爲把數組索引作爲鍵值。

var arr = [1,2,3,4];
arr.value = "val";
for(var i in arr){
    console.log(i+" "+arr[i]);
}
console.log(arr); //[1, 2, 3, 4, value: "val"]
alert(arr);//[1, 2, 3, 4]
var arr = [1,2,3,4];
arr.value = "val";
for(var i of arr){
    console.log(i); //1,2,3,4
}

第五種:

every():
如果數組中檢測到有一個元素不滿足,則整個表達式返回 false ,且剩餘的元素不會再進行檢測。
如果所有元素都滿足條件,則返回 true。
注意:
every() 不會對空數組進行檢測。
every() 不會改變原始數組。

var arr = [1, 2, 3];
var demo = arr.every(function(item){
    return item > 0;
});
console.log(demo);

第六種:

filter():
返回一個新數組。每一項返回值爲true的都放入新數組中

var arr = [1, 2, 3];
var demo = arr.filter(function(item){
    return item > 1;
});
console.log(demo);

第七種:

map():
返回一個新數組。哪一個有返回值就把哪一項添加進新數組

var arr = [1, 2, 3];
var demo = arr.map(function(item){
    return item > 1;
});
console.log(demo);//false,true,true

第八種:

some():
如果每一項都返回false結果是false;
如果有一項返回true,那麼立刻停止遍歷返回true
和every()相反

var arr = [1, 2, 3];
var demo = arr.some(function(item){
    return item > 1;
});
console.log(demo); //true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章