1. 程式人生 > >ES5 陣列方法

ES5 陣列方法

ES5 陣列方法

ES5 定義了九個新的陣列方法來遍歷、對映、過濾、簡化和搜尋陣列。

1.forEach()

forEach()方法從頭至尾遍歷陣列,為每個元素呼叫指定的函式。三個引數:陣列元素、元素的索引和陣列本身。

var data = [1, 2, 3, 4, 5]
var sum = 0
data.forEach(function(val){
  sum += value
})
sum // 15
data.forEach(function(v, i, a){
  a[i] = v + 1
})
data // [2, 3, 4, 5, 6]

2.map()

map()方法將呼叫的陣列的每個元素傳遞給指定的函式,並返回一個數組,它包含該函式的返回值。

var a = [1, 2, 3]
var b = a.map(function(x){
  return x * x
})
b // [1, 4, 9]

傳遞給map的函式應該有返回值。map返回的是新陣列,它不修改呼叫的陣列。

3. filter()

filter()方法返回的陣列元素是呼叫陣列的一個子集。傳遞的函式是用來邏輯判定的:該函式返回true或false。如果返回值是true,那麼傳遞給判定函式的元素就是這個子集的成員,它將被加到一個作為返回值的陣列中。

var a = [5,4,3,2,1]
var smallvalues = a.filter(function
(x){
return x < 3 ) smallvalues // [2, 1] var everyother = a.filter(function(x, i){ // x 為每個元素 // i 為改元素的下標 return i % 2 == 0 }) everyother // [5, 3, 1]

4. every()和some()

它們是對陣列元素應用指定的函式進行判定,返回true或false

every()

“針對所有”的意思,當且僅當針對陣列中所有元素呼叫判定函式都返回true,它才返回true

var a = [1, 2, 3, 4, 5]
a.every(function
(x){
return x < 10}) // true a.every(function(x){return x % 2 === 0}) // false

some()

“存在”的意思,當陣列中至少有一個元素呼叫判定函式返回true,它就返回true;當且僅當數值中所有元素呼叫判定函式都返回false,它才返回false。

var a = [1, 2, 3, 4, 5]
a.some(function(x){return x % 2 === 0}) // true
a.some(isNaN) // false: a不包含非數值元素

注意:一旦every()和some()確認範圍什麼值它們就會停止遍歷陣列元素。
some()在判定函式第一次返回true後就返回true,但如果判定函式一直返回false,它將會遍歷整個陣列。
every()恰好相反:它在判定函式第一次返回false後就返回false,但是如果判定函式一直返回true,它將會遍歷整個陣列。

5. reduce()和reduceRight()

它們使用指定的函式將陣列元素進行組合,生成單個值。

var a = [1, 2, 3, 4, 5]
var sum = a.reduce(function(x, y){return x + y}, 0) // 15 求和
var product = a.reduce(function(x, y){return x * y}, 1) // 120 求積
var max = a.reduce(function(x, y){return (x>y)? x: y}) // 5 求最大值

reduce()需要兩個引數。第一個是執行化簡操作的函式。化簡函式的任務就是用某種方法把兩個值組合或簡化為一個值,並返回簡化後的值。第二個引數是可選引數,傳遞給函式的初始值。
上例中第三次呼叫reduce()沒有指定初始值。它將使用陣列的第一個元素作為其初始值。
空陣列上,不帶初始值引數呼叫reduce()將導致型別錯誤異常。如果呼叫它的時候只有一個值——陣列只有一個元素並且沒有指定初始值,或者有一個空陣列並且指定一個初始值——reduce()只是簡單地返回那個值而不會呼叫化簡函式。

和reduceRight()與reduce()一樣,不同的是它按照索引從高到低處理陣列。

6. indexOf()和lastIndexOf()

它們搜尋整個陣列中具有給定值的元素,返回找到的第一個元素的索引或者沒有找到就返回-1。indexOf()從頭至尾搜尋,而lastIndexOf()則反向搜尋。

a = [0, 1, 2, 1, 0]
a.indexOf(1) // 1
a.lastIndexOf(1) // 3
a.indexOf(3) // -1

它們不接受一個函式作為其引數。第一個引數是需要搜尋的值,第二個引數是可選的:它指定陣列中的一個索引,從那裡開始搜尋。第二個引數,可以為負數,它代表相對陣列末尾的偏移量。
字串也有indexOf()和lastIndexOf()