COVER:
https://blog.csdn.net/u010323023/article/details/52759801
如果去問一個不太了解JavaScript數組的開發(fā)人員,JavaScript的數組有多少種迭代方法,你可能得到的答案為,for/while/do-while...等等,這個是循環(huán)中的方法,和我們數組的迭代還是有一些區(qū)別的。雖然在數組中我們也可以用這些方法去迭代。但是,為了裝逼為了飛,我們就來寫一點帶有腳本味道的代碼吧!
1、every(): 對數組中的每一項運行給定的函數,如果該函數對每一項都返回true,則結果返回true。
2、filter(): 對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組。
3、forEach(): 對數組中的每一項運行給定函數,這個方法沒有返回值。
4、map(): 對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
5、some(): 對數組中的每一項運行給定函數,如果該函數任意一項返回true,則返回true。
以上的方法都不會修改數組中包含的值。
在這些方法中,最相似的是every()和some()。他們都用于查詢數組中的項是否滿足某個條件。對every來說,傳入的函數必須對數組中的每一項都返回true,這個方法才返回true;否則,他就返回false。在這里我們總結為有假則假,都真才真。而some()方法則是只要傳入的函數對數組中的任何一項返回true,就返回true。請看下面例子:
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var everyResult = numbers.every(function(item, index, array) {
return (item > 2);
});
var someResult = numbers.some(function(item) {
return (item > 2);
});
console.log(everyResult); //false
console.log(someResult); //true
需要提醒的是,在some()方法的函數中我并沒有傳入三個參數,而是不在函數體內用不到后兩個參數,所以我省略了。以上的迭代調用了every()和some(),傳入的函數只要給定項大于2就會返回true。對于every(),它返回false,因為數組中只有部分滿足條件。對于some(),結果返回true,因為數組中至少有一項是大于2的。
下面再來看看filter()函數,他利用指定的函數確定是否在返回的數組中包含某一項,就是說根據指定的函數來篩選符合條件的項組成新的數組并返回。例如,要返回一個所有值都大于2的數組,可以使用下面的代碼:
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var filterResult = numbers.filter(function(item) {
return (item > 2);
});
console.log(filterResult); \\[3, 4, 5, 4, 3]
這里,通過調用filter()方法創(chuàng)建并返回了包含3、4、5、4、3的數組,因為傳入的函數對它們每一項都返回true。這個方法對查詢符合某些條件的所有數組項非常有用。
map()方法也返回一個數組,而這個數組的每一項都是在原始數組中的對應項上運行傳入函數的結果。例如,可以給數組中的每一項乘以2,然后返回這些乘積組成的數組,如下所示:
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var mapResult = numbers.map(function(item) {
return (item * 2);
});
console.log(mapResult); //[2, 4, 6, 8, 10, 8, 6, 4, 2]
以上代碼返回的數組中包含給每個數乘以2之后的結果。這個方法適合創(chuàng)建包含的項與另一個數組一一對應的數組。
最后一個方法就是forEach()。它只是對數組中的每一項運行傳入的函數。這個方法沒有返回值,本質上與用for循環(huán)迭代數組一樣,來看一個例子:
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.forEach(function(item, index, arr) {
//這里執(zhí)行一些操作
});
這些數組方法通過執(zhí)行不同的操作,可以大大方便處理數組的任務。還是那句話,在自己的腳本里面寫一些有腳本味道的代碼,能夠提高代碼的質量和可讀性,甚至減少代碼量。支持這些迭代方法的瀏覽器有IE9+、FireFox 2+、Safari 3+、Opera 9.5+和chrome。