一.
1. for(let I = 0; I < arr.length; I++)
while
2. arr.forEach() -->代替普通for循環
-
三個參數:val當前遍歷到的數據,index當前遍歷到的數據的序號,arr當前遍歷的數組
let arr = ['apple', 'banana', 'orange'];
arr.forEach(function(val, index, arr){
console.log(val,index,arr);
});
-->輸出
apple 0 ['apple', 'banana', 'orange']
banana 1 ['apple', 'banana', 'orange']
orange 2 ['apple', 'banana', 'orange']
3. arr.map()-->做數據交互“映射”
(1)返回的是個新的數組,map()方法不會改變原數組,需要配合return,return的值會將原數組中的對應值替換掉 。
(2)平時只要用map,一定要有return
let arr = [
{title:'aaa', read:100, hot:true},
{title:'bbb', read:100, hot:true},
{title:'ccc', read:100, hot:true},
{title:'ddd', read:100, hot:true}
];
let newArr = arr.map((item,index,arr)=>{
console.log(item,index,arr);
return 1;
});
console.log(newArr);
-->返回四個1的數組
(3)若是沒有return,相當於forEach()
let arr = [
{title:'aaa', read:100, hot:true},
{title:'bbb', read:100, hot:true},
{title:'ccc', read:100, hot:true},
{title:'ddd', read:100, hot:true}
];
arr.map((item,index,arr)=>{
console.log(item,index,arr);
});
4. arr.filter()-->過濾
(1) filter方法的return只有兩種情況,true/false;如果返回true就保留這個數據,如果返回false,就刪除這個數據。也是返回新數組,不改變原數組。
newarr = [65,76,88];
(2)過濾一些不合格“元素”,如果回調函數返回true,就留下來
let arr = [
{title:'aaa', read:100, hot:true},
{title:'bbb', read:100, hot:false},
{title:'ccc', read:100, hot:true},
{title:'ddd', read:100, hot:false}
];
let newArr = arr.filter((item,index,arr)=>{
return item.hot == true;
});
console.log(newArr);
5. arr.some()-->類似查找,數組裏面某一個元素符合條件,返回true
let arr = ['apple', 'banana', 'orange'];
let b = arr.some((val, index, arr)=>{
return val == 'banana';
});
console.log(b);
-->輸出true
- findInArray函數封裝
let arr = ['apple', 'banana', 'orange'];
function findInArray(arr, item){
return arr.some((val, index, arr)=>{
return val == item;
})
}
findInArray(arr, 'orange');
-->返回true
6. arr.every()-->數組裏面所有的元素都要符合條件,才返回true
eg:判斷數組內部是否都爲奇數
let arr = [1,3,5,7,10];
let a = arr.every((val, index, arr)=>{
return val % 2 == 1;
});
console.log(a);
-->false
7. 以上五種循環方法,都可以接收兩個參數
arr.forEach/map...(循環回調函數,this指向誰)
let arr = ['apple', 'banana', 'orange'];
arr.forEach(function(val, index, arr){
console.log(this,val,index,arr);
},window);
二. 內部參數更復雜一些的循環方法
1. arr.reduce()-->從左往右
(1)求數組的和
let arr = [1,2,3,4,5,6,7,8,9,10];
let sum = arr.reduce((prev, cur, item, arr)=>{
return prev + cur;
//代表上一次存儲的結果+當前值
});
console.log(sum);
(2)求次方
let arr = [2,2,4];
let res = arr.reduce((prev, cur, item, arr)=>{
return Math.pow(prev , cur);
});
console.log(res);
-->2的2次方,的4次方
2. arr.reduceRight()-->從右往左
let arr = [2,3,4];
let res = arr.reduce((prev, cur, item, arr)=>{
return Math.pow(prev , cur);
});
console.log(res);
-->4的3次方,的2次方
三.for...of...
let arr = ['apple', 'banana', 'orange'];
for(let val of arr){
console.log(val);
}
-->
apple
banana
orange
- arr.keys() 數組下標
let arr = ['apple', 'banana', 'orange'];
for(let index of arr.keys()){
console.log(index);
}
-->
0
1
2
arr.entries() 數組某一項
let arr = ['apple', 'banana', 'orange'];
for(let item of arr.entries()){
console.log(item);
}
-->
[0,'apple']
[1,'banana']
[2,'orange']
let arr = ['apple', 'banana', 'orange'];
for(let [key,val] of arr.entries()){
console.log(key,val);
}
-->
0 'apple'
1 'banana'
2 'orange'