ECMAScript5為數組定義了5個迭代方法。每個方法都接收兩個參數:要在每一項上運行的函數和(可選的)運行該函數的作用域對象(即影響this的值)。傳入這些方法中的函數會接收三個參數:數組項的值、該項在數組中的位置和數組對象本身。根據使用方法的不同,這個函數執行后的返回值可能會也可能不會影響方法的返回值。這5個迭代方法是:
五個迭代方法 都接受兩個參數:要在每一項上運行的函數 和 運行該函數的作用域(可選)
every():對數組中的每一項運行給定函數。如果函數對每一項都返回true,則返回true。
filter():對數組中的每一項運行給定函數。返回該函數會返回true的項組成的數組。
forEach():對數組中每一項運行給定函數。該函數沒有返回值。
map():對數組中每一項運行給定函數。返回每次函數調用的結果組成的函數。
some():對數組中每一項運行給定函數。如果函數對 任一項返回true,則返回true
以上所有的方法都不會修改數組中包含的值。
在上面的方法中,every()和some()非常相似,它們都用于查詢數組中的項是否滿足某個條件。對于every()方法來說,傳入的函數必須對每一項都返回true,這個方法才返回true。否則,它就返回false。而some()方法則是只要傳入的函數對數組的某一項返回true,就會返回true。例如:
var nums = [1,2,3,4,5,4,3,2,1];var result = nums.every(function(item, index, array){ return (item > 2);})console.info(result);
上面的代碼會在控制臺中打印false。
var nums = [1,2,3,4,5,4,3,2,1];var result = nums.some(function(item, index, array){ return (item > 2);})console.info(result);
上面的代碼會在控制臺中打印true。
下面是一個filter()函數的例子,它利用指定的函數確定是否存在返回的數組中包含某一項。例如,要返回一個所有數值都大于2的數組,可以使用下面的代碼:
var nums = [1,2,3,4,5,4,3,2,1];var result = nums.filter(function(item, index, array){ return (item > 2);})console.info(result); // [3,4,5,4,3]
上面的代碼通過調用filter()方法返回包含3,4,5,4,3的數組。這個方法對于查詢符合某些條件的所有數組非常有用。
map()方法也返回一個數組,而這個數組的每一項都是在原始數組中的對應項上運行傳入函數的結果。例如,可以給數組中的每一項都乘以2,然后返回這些乘積組成的數組:
var nums = [1,2,3,4,5,4,3,2,1];var result = nums.map(function(item, index, array){ return item * 2;})console.info(result); // [2,4,6,8,10,8,6,4,2]
map()方法適合用于創建包含的項于另一個數組一一對應的數組。
最后一個是forEach()方法,它只是對數組中的每一項運行傳入的函數。這個方法沒有返回值,本質上于使用for循環迭代數組是一樣的??聪旅娴睦樱?/p>
var nums = [1,2,3,4,5,4,3,2,1];nums.forEach(function(item, index, array){ //執行需要的操作})
js中的這些數組方法通過執行不同的操作,可以大大的方便處理數組的任務。
支持這些迭代方法的瀏覽器有:IE9+,Firefox2+,Safari3+,Opera9.5+和Chrome。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]; //every()和some()最相似 //every() item:當前遍歷項,index:當前項索引,array:數組對象本身 var everyResult = numbers.every(function (item, index, array) { return item > 2; }); alert(everyResult);//false //some() var someResult = numbers.some(function (item, index, array) { return item > 2; }); alert(someResult);//true //filter var filterResult = numbers.filter(function (item, index, array) { return item > 2; }); alert(filterResult);//[3,4,5,4,3] //map() var mapResult = numbers.map(function (item, index, array) { return (item * 2); }); alert(mapResult);//[2,4,6,8,10,8,6,4,2] //forEach 本質上和for循環沒有區別 var forEachResult=numbers.forEach(function(item,index,array){ alert(item) });
以上就是本文的全部內容了,希望能給大家一些提示,能夠更好的理解javascript迭代方法。
新聞熱點
疑難解答