1.for循環
1.基礎版
for (var i = 0; i < arr.length; i++) {
}
2.優化版
for(var i = 0, len = arr.length; i < len; i++) {
}
使用臨時變量,將長度緩存起來,避免重復獲取數組長度,當數組較大時優化效果才會比較明顯。
這種方法基本上是所有循環遍歷方法中性能最高的一種,
並且這一類型的for循環可以通過用中斷語句(break、continue、return)來中斷循環,
3.增強for循環
2. arr.foreach
遍歷數組中的每一項,沒有返回值,對原數組沒有影響.
當forEach操作基本數據類型的時候,並不會改變原數組中的值。而當forEach操作引用數據類型的時候,才會改變原數組中的值。
數組本身也是引用數據類型,所以我們要用forEach來修改基本數據類型的時候,可以通過引用訪問的方式來對元素進行修改。
不能通過中斷語句來終止循環。
arr = ['a', 'b', 'c', 'd']
arr.forEach((item, index, array) => {
console.log(item); 每一項的內容
console.log(index);每一項內容下下標
console.log(array);原始的數據
});
let arr = [1, 2, 3, 4]
arr.forEach((item, index) => {
arr[index] = 0
})
console.log(arr) // [0, 0, 0, 0]
3. arr.map
和arr.foreach類似。有返回值,可以return出來
map的回調函數中支持return返回值;return的是啥,相當於把數組中的這一項變為啥
(並不影響原來的數組,只是相當於把原數組克隆一份,把克隆的這一份的數組中的對應項改變了);
arr2=arr.map((item, index, array) => {
return item = 2 * item
});
console.log(arr2);
//arr2的內容會基於return的語句賦值給新的數組中的每一項
//arr2相當於在arr每一項的基礎上*2
map和foreach區別::
1.forEach()方法不會返回執行結果,而是undefined。也就是說,forEach()會修改原來的數組。
map()方法會得到一個新的數組並返回。
2.forEach()的執行速度 < map()的執行速度
4.for···of
允許遍歷獲得鍵值(value),對於普通對象,沒有部署原生的 iterator 接口,直接使用 for...of 會報錯;
for...of 循環可以與break、continue 和 return 配合使用,跳出循環
循環可以用來遍歷數組、類數組對象,字符串、Set、Map 以及 Generator 對象
arr2 = ['a', 'b', 'c', 'd']
for (let ietm of arr2) {
console.log(ietm);
}
//輸出 a,b,c,d
5.for····in····
可以使用 for...in 循環遍歷鍵名
for...in 循環不僅遍歷數字鍵名,還會遍歷手動添加的其它鍵,甚至包括原型鏈上的鍵。for...of 則不會這樣
循環主要是為了遍歷對象而生,不適用於遍歷數組
arr2 = ['a', 'b', 'c', 'd']
for (let item in arr2) {
console.log(item);
}
//遍歷得到字符串類型的鍵 0,1,2,3
arr2 = {
am: 'a',
bm: 'b',
cm: 'c'
}
for (let item in arr2) {
console.log(item);
}
//遍歷得到鍵名 am,bm,cm
6.filter
不會改變原始數組,返回新數組,用於對之前數組的過濾和篩選
var arr = [1, 2, 3];
const arr2=arr.filter(item => { // item為數組當前的元素
return item > 1; // [2, 3]
})
map和filter的區別:
- 相同點:filter 和 map 都是對數組的操作,均返回一個新的數組
- 不同點:filter是滿足條件的留下,是對原數組的過濾;map則是對原數組的加工,映射成一一映射的新數組
7.somo() 和every()
every()是對數組中的每一項運行給定函數,如果該函數對每一項返回true,則返回true。(全部滿足才返回true)
every()是對數組中的每一項運行給定函數,如果該函數對每一項返回true,則返回true。(一個滿足就返回true)
var arr = [ 1, 2, 3, 4, 5, 6 ];
console.log( arr.every( function( item, index, array ){
return item > 3;
}));
false
var arr = [ 1, 2, 3, 4, 5, 6 ];
console.log( arr.some( function( item, index, array ){
return item > 3;
}));
true