簡述JS中forEach()、map()、every()、some()和filter()的用法
前言
在文章開頭,先問大傢一個問題:
在Javascript中,如何處理數組中的每一項數據?
有人可能會說,這還不簡單,直接一個for循環遍歷一下就好瞭。
是的,確實,這是最常見的做法。
但是,除此之外,ES5還提供瞭處理數組更加方便的方法,如題。
接下來,我將通過幾個簡單的實例來具體講解這幾個方法。
一、forEach(),用於遍歷數組,無返回值
這裡先給出一個數組(以下例子通用):
var arr = [1,-2,3,4,-5];
然後我要做事情的就是,將數組中的每一項翻倍。
arr.forEach(function(item,index,array){ array[index] = item * 2; }); console.log(arr); // [2,-4,6,8,-10]
可以看到,forEach()可以傳入一個匿名函數作為參數,而該匿名函數有含有三個參數,其依次代表數組遍歷時的當前元素item,數組遍歷時的當前元素的索引index,以及正在遍歷的數組array。有瞭這三個參數,可以方便我們做很多事情,比如說示例當中將每一項數組元素翻倍,這時需要用到第一個參數item。但是,僅僅隻是將item乘以2可不行,我們還得將其賦值給原來的數組,這時我們就得用到後面兩個參數index和array。
根據上述可知,array[index]是全等於item的。
arr.forEach(function(item,index,array){ console.log(array[index] === item); // true });
二、map(),用於遍歷數組,返回處理之後的新數組
var newArr = arr.map(function(item,index,array){ return item * 2; }); console.log(newArr); // [2,-4,6,8,-10]
可以看到,該方法與forEach()的功能類似,隻不過map()具有返回值,會返回一個新的數組,這樣處理數組後也不會影響到原有數組。
三、every(),用於判斷數組中的每一項元素是否都滿足條件,返回一個佈爾值
var isEvery = arr.every(function(item,index,array){ return item > 0; }); console.log(isEvery); // false
可以看到,示例中是要判斷數組arr中的元素是否都為正數,很顯然不是,所以該方法最終返回false。
四、some(),用於判斷數組中的是否存在滿足條件的元素,返回一個佈爾值
var isSome = arr.some(function(item,index,array){ return item < 0; }); console.log(isSome); // true
可以看到,該方法與every()類似,示例中是要判斷數組arr中是否存在負數元素,很顯然存在,所以該方法最終返回true。
五、filter(),用於篩選數組中滿足條件的元素,返回一個篩選後的新數組
var minus = arr.filter(function(item,index,array){ return item < 0; }); console.log(minus); // [-2, -5]
可以看到,示例中是要篩選出數組arr中的所有負數,所以該方法最終返回一個篩選後的新數組[-2, -5]。
補充: 以上五大方法除瞭傳遞一個匿名函數作為參數之外,還可以傳第二個參數,該參數用於指定匿名函數內的this指向,例如:
// 隻傳一個匿名函數 arr.forEach(function(item,index,array){ console.log(this); // window });
// 傳兩個參數 arr.forEach(function(item,index,array){ console.log(this); // [1, -2, 3, 4, -5] },arr);
兼容性: 由於以上方法均屬ES5方法,所以IE8及其以下瀏覽器均不兼容。
補充小結:
map():有返回值,可以return出來
forEach():沒有返回值
filter():返回一個符合func條件的元素數組(並沒有改變原數組)
some():返回一個boolean,判斷是否有元素是否符合func條件(有一個就行)(並沒有改變原數組)
every():返回一個boolean,判斷每個元素是否符合func條件(所有都判斷)(並沒有改變原數組)
重點總結:
① forEach()無返回值,map()和filter()返回新數組,every()和some()返回佈爾值
② 匿名函數中this指向默認為window,可通過傳第二參數來更改之
③ 五種遍歷方法均為ES5方法
總結
到此這篇關於JS中forEach()、map()、every()、some()和filter()用法的文章就介紹到這瞭,更多相關JS forEach()、map()、every()、some()和filter()內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!
推薦閱讀:
- 七種JS實現數組去重的方式
- JavaScript中forEach的錯誤用法匯總
- JavaScript常用數組去重的方法及對比詳解
- 梳理總結25JavaScript數組操作方法實例
- JavaScript數組去重的幾種方法詳談