JavaScript陣列的迭代方法(every、filter、forEach、map和some)
阿新 • • 發佈:2018-12-15
ES5 中為陣列定義了 5 個迭代方法。每個方法都接收兩個引數:要在每一項上執行的函式和(可選的)執行該函式的作用域物件——影響 this 的值。
傳入這些方法中的函式接收三個引數:陣列項的值、該項在陣列中的位置(索引)和陣列物件本身。
這 5 個方法都不會修改原陣列中包含的值。
every ( ) 和 some ( )
every ( ) 和 some ( ) 是一對功能比較相近的函式,他們用於查詢陣列中的項是否滿足某個條件。
every ( ) : 對陣列中的每一項執行給定函式,如果該函式對每一項都返回 true,則返回 true。
some ( ) : 對陣列中的每一項執行給定函式,如果該函式對任一項返回 true
例如:
var nums = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var everyResult = nums.every(function(item, index, array){
return (item > 2);
});
var someResult = nums.some(function(item, index, array){
return (item > 2);
});
alert(everyResult) // false
alert(someResult) // true
filter ( )
filter ( ) 方法利用指定的函式確定是否存在返回的陣列中包含某一項。filter 是過濾器的意思,這個方法也可以理解為對陣列過濾,返回符合指定函式要求的陣列項組成的陣列。
例如:
var filterResult = nums.filter(function(item, index, array){
// 返回滿足條件的項
return (item > 2);
})
alert(filterResult) // 3,4,5,4,3
map ( )
map ( ) 方法也返回一個數組,陣列中的每一項都是在原始陣列中的對應項上執行傳入函式的結果。
這個方法適合建立包含的項與另一個數組一一對應的陣列。
例如:
var mapResult = nums.map(function(item, index, array){
return item * 2;
})
alert(mapResult) // 2,4,6,8,10,8,6,4,2
forEach ( )
forEach ( ) 方法只是對陣列中的每一項執行傳入的函式,這個方法沒有返回值。 本質上與使用 for 迴圈迭代一樣。
例如:
nums.forEach(function(item, index, array){
// 不會改變原陣列
item *= 2;
})
alert(nums) // 1,2,3,4,5,4,3,2,1
nums.forEach(function(item, index, array){
// 可以改變原陣列
array[index] *= 2;
})
alert(nums) // 2,4,6,8,10,8,6,4,2
全部程式碼
var nums = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var everyResult = nums.every(function(item, index, array){
return (item > 2);
})
var someResult = nums.some(function(item, index, array){
return (item > 2);
})
var filterResult = nums.filter(function(item, index, array){
return (item > 2);
})
var mapResult = nums.map(function(item, index, array){
return item * 2;
})
nums.forEach(function(item, index, array){
// item *= 2;
array[index] *= 2;
})
alert(everyResult) // false
alert(someResult) // true
alert(filterResult) // 3,4,5,4,3
alert(mapResult) // 2,4,6,8,10,8,6,4,2
alert(nums) // 2,4,6,8,10,8,6,4,2