map(映射), reduce(規約), forEach(遍歷), filter(過濾),它們都是高階函數,都是以傳入不一樣的函數來以不一樣的方式操做數組元。ie都不支持
判斷是否爲數組
Array.isArray({})
//=>false
Array.isArray('')
//=> false
Array.isArray([])
//=>true
查找數組內指定元素位置
- indexOf(ele) / .lastIndexOf(ele)
[1,2,3,4,2,3].indexOf(2) //= > 1 從左到右返回第一個匹配的
[1,2,3,4,2,3].lastIndexOf(2) //=> 4 從右到左第一個匹配元素的位置
遍歷數組
- forEach 爲每一個元素執行對應的方法
遍歷數組,參數爲一個回調函數,回調函數有三個參數:當前元素,元素索引,整個數組
var a=new Array(1,2,3,4,5,6)
a.forEach(function(val,i,array){ //
a[i]=val+1;
});
- map 遍歷數組 ,參數爲一個回調函數,返回一個新數組
var a=new Array(1,2,3,4,5,6)
a.map((e,i)=>{
return e*e
});
//=>[1, 4, 9, 16, 25, 36]
- .reduce(function(v1,v2),value) / .reduceRight(function(v1,v2),value)
遍歷數組,方法有兩個參數
- 回調函數,把兩個值合爲一個,並返回結果
- value ,一個初始值,可選
//不傳initialValue值
var arr = [1,2,3];
arr.reduce(function(pre,cur,index,arr){return pre+cur});
//結果 6
//累加了兩次
// 傳入initialValue 值
var arr = [1,2,3]
arr.reduce(function(pre,cur,index,arr){return pre+cur},10);
//結果16
//累加了3次,初始值爲10
//拼接全部的數組
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( ( acc, cur ) => acc.concat(cur));
//輸出[0, 1, 2, 3, 4, 5]
- filter(function(ele))
返回原數組的一個子集,回調函數邏輯判斷爲true則返回,爲false和索引爲空則不返回,原數組保持不變
//排除掉小於10的值
var isBigEnough=(element)=> {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
數組轉字符串
var a=[1,2,3,9,7]
a.join(',')
//=>"1,2,3,9,7"
//注意原數組不會被改變
數組去重
a=[1,2,3,4,3,3,3,2]
var arr=new Set(a)
Array.from(arr)
//=>[1, 2, 3, 4]
arr.filter((item, pos) => arr.indexOf(item) === pos)