1币喧、forEach
var arr1 = [
{name:'鳴人',age:16},
{name:'佐助',age:17}
];
var arr2 = [1,2,3];
arr1.forEach(item => {
item.age = item.age + 1}
);
//=> [{name:'鳴人',age:17},{name:'佐助',age:18}]
arr2.forEach(item => {
item = item * 2}
)
// => [1,2,3]
最后的結(jié)果是,arr1發(fā)生了改變袱耽,鳴人杀餐、佐助都長了一歲,arr2沒有任何改變朱巨。所以史翘,可以粗暴得出結(jié)論:當(dāng)數(shù)組中元素是值類型,forEach絕對不會改變數(shù)組冀续;當(dāng)是引用類型琼讽,則可以改變數(shù)組
2 .不支持鏈?zhǔn)讲僮鳎砸韵麓a是錯誤的:
[1,2,3,4,5].forEach(
item => console.log(item)
).filter(item => {
return item > 2
})
// Uncaught TypeError: Cannot read property 'filter' of undefined
注意這里我們說僅僅是forEach()這個方法不支持鏈?zhǔn)秸{(diào)用洪唐,在調(diào)用forEach之前钻蹬,前面的數(shù)組你怎么玩鏈?zhǔn)蕉紱]問題,最后返回一個正常數(shù)組即可:
// 這個沒問題
[1,2,3,4,5].filter(item => {
return item > 2
}).forEach(item => {
console.log(item)
})
2凭需、map
map()功能很強(qiáng)大问欠,forEach()的一些局限性它很多都能解決。"map"即"映射"粒蜈,也就是原數(shù)組被"映射"成對應(yīng)新數(shù)組顺献。
創(chuàng)建新數(shù)組不代表不能用它改變原有數(shù)組,你用原有數(shù)組去承載就可以:
let arr = [1,2,3];
arr = arr.map(item => { return item * 2 })
arr同樣也會改變薪伏,所以這也不費(fèi)事嘛滚澜。。。
2设捐、filter
map()沒法做到的過濾借浊,就交給filter()去完成,這個大家肯定也都知道萝招。filter()和map()很像蚂斤,就像周董《東風(fēng)破》和《發(fā)如雪》一樣像,也是創(chuàng)建一個新數(shù)組槐沼,新數(shù)組中的元素是篩選出來的符合條件的所有對象曙蒸。簡單寫個例子:
let newArr = [1,2,3,4,5].filter(item =>{
if(item > 3) return item
})
// => [4,5]
4、sort()
sort()用于對數(shù)組的元素進(jìn)行排序岗钩。排序順序可以是字母或數(shù)字纽窟,并按升序或降序。
4.1 基礎(chǔ)點(diǎn)
1.默認(rèn)排序按字母升序(更準(zhǔn)確一些是根據(jù)字符串Unicode碼點(diǎn)):
[3,4,2,1,5].sort()
// => [1,2,3,4,5]
['Javascript','Vue','React','Node','Webpack'].sort();
// => ["Javascript", "Node", "React", "Vue", "Webpack"]
sort()與map()兼吓、filter()等不同臂港,它直接改變原始數(shù)組(很重要!)视搏;
2. 獲取數(shù)組中的指定元素
let testArr = [{name:'鳴人',age:16},{name:'佐助',age:17},{name:'卡卡西',age:26}]
let index = testArr.findIndex(item => { return item.age > 16 });
// => 1
let testArr = [{name:'鳴人',age:16},{name:'佐助',age:17},{name:'卡卡西',age:26}]
let index = _.findIndex(testArr, {name:'佐助'});
// => 1
2.2 find()
find()顧名思義审孽,就是用來在數(shù)組中找到我們所需要的元素,并且和some()一樣浑娜,只要有一個滿足即返回該元素佑力,不會多余遍歷,對性能很友善筋遭。
let testArr = [{name:'鳴人',age:16},{name:'佐助',age:17},{name:'卡卡西',age:27},{name:'佐助',age:17}]
let result = testArr.find(item => { return item.name == '佐助'});
// => { name:'佐助',age:17 }