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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值