1. 程式人生 > >JavaScript陣列的迭代方法(every、filter、forEach、map和some)

JavaScript陣列的迭代方法(every、filter、forEach、map和some)

ES5 中為陣列定義了 5 個迭代方法。每個方法都接收兩個引數:要在每一項上執行的函式和(可選的)執行該函式的作用域物件——影響 this 的值。

傳入這些方法中的函式接收三個引數:陣列項的值、該項在陣列中的位置(索引)和陣列物件本身。

這 5 個方法都不會修改原陣列中包含的值。


every ( ) 和 some ( )

every ( ) 和 some ( ) 是一對功能比較相近的函式,他們用於查詢陣列中的項是否滿足某個條件。
every ( ) : 對陣列中的每一項執行給定函式,如果該函式對每一項都返回 true,則返回 true。
some ( ) : 對陣列中的每一項執行給定函式,如果該函式對任一項返回 true

,則返回 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