ES6 陣列新特性(map,filter,forEach,reduce)
阿新 • • 發佈:2018-12-09
map:原來陣列有多少個,map 處理之後還是那麼多個。引數:item,index,array
let arr = [12,35,56,79,56]; let arr1 = arr.map(item => item%2 === 0 ? '偶' : '奇'); let arr2 = arr.map((item,index) => index + ':' + item); console.log(arr); // [ 12, 35, 56, 79, 56 ] console.log(arr1); // [ '偶', '奇', '偶', '奇', '偶' ] console.log(arr2); // [ '0:12', '1:35', '2:56', '3:79', '4:56' ]
filter: 過濾掉不符合條件的。引數:item,index,array
let arr = [12,75,56,79,56];
let arr1 = arr.filter(item => item>=60);
console.log(arr); // [ 12, 75, 56, 79, 56 ]
console.log(arr1); // [ 75, 79 ]
forEach: 遍歷。僅僅只是迴圈用,無返回值,也不會改變原陣列。 引數:item,index,array
let arr = [12,35,56,79,56]; let arr1 = arr.forEach(item => item+20); console.log(arr); // [12,35,56,79,56] console.log(arr1); // undefined
reduce: 彙總。下面程式碼中的 tmp 可以理解為前一個值。
let arr = [12,35,56,79,56];
let avg = arr.reduce((tmp,item,index) => {
tmp += item;
if(index === arr.length-1) tmp /= (index+1);
return tmp;
})
console.log(avg); // 47.6 也就是這五個數的平均值
關於 reduce 的引數,其實有五個,tmp,item,index,array,init。如果沒有傳入 init,初始值就會取陣列的第一個值,並且內部呼叫時,index 從1開始。
let arr = [12,35,56,79,56];
let avg = arr.reduce((tmp,item,index,array) => {
console.log(tmp,item,index,array);
tmp += item;
if(index === arr.length-1) {
console.log('我要求平均數了');
tmp /= (index+1);
}
return tmp;
})
console.log(avg);
/*
12 35 1 [ 12, 35, 56, 79, 56 ]
47 56 2 [ 12, 35, 56, 79, 56 ]
103 79 3 [ 12, 35, 56, 79, 56 ]
182 56 4 [ 12, 35, 56, 79, 56 ]
我要求平均數了
47.6
*/
如果傳入了初始值 10000,index 就從0開始。tmp 的初始值也就是10000,結果自然也不同了。
let arr = [12,35,56,79,56];
let avg = arr.reduce((tmp,item,index,array) => {
console.log(tmp,item,index,array);
tmp += item;
if(index === arr.length-1) {
console.log('我要求平均數了');
tmp /= (index+1);
}
return tmp;
}, 10000)
console.log(avg);
/*
10000 12 0 [ 12, 35, 56, 79, 56 ]
10012 35 1 [ 12, 35, 56, 79, 56 ]
10047 56 2 [ 12, 35, 56, 79, 56 ]
10103 79 3 [ 12, 35, 56, 79, 56 ]
10182 56 4 [ 12, 35, 56, 79, 56 ]
我要求平均數了
2047.6
*/