Javascript -- 数组迭代方法学习

一、数组迭代方法

1、forEach

调用

arr.forEach((value, index) => {
  console.log(value, index)
})

forEach是循环遍历一遍数组的每一项,这个是没有返回值的,这个方法里面有个回调函数,回调函数有两个参数,第一个是数组每一项的值value,第二个参数是数组每一项对应的下标索引index

Tips这个forEahc循环遍历和JQuery的$.each()方法是类似的,只不过需要注意的是$.each方法里面的回调函数的两个参数跟forEach方法是相反的,第一个参数是数组每一项的下标索引index,第二个参数才是数组每一项 的值value

2、every

方法参考文献

调用

const boolean = arr.every((value, index, arr) => {
  return value==2
})

这个数组方式有点类似短路运算&&,可以当作是一个数组验真的方法,这个方法里面有个回调函数,这个回调函数有三个参数,第一个是测试的数组每一项,第二个是测试数组项的下标索引,第三个是测试的原数组

测试数组的每一项都会执行every()方法里面的回调函数,这个函数是用来校验数组的每一项是否满足指定条件,数组每一项都会执行一次回调函数,如果数组里面的所有项都满足指定条件,则返回true,但凡数组里有一项不满足条件,则返回false

Tips 如果测试的是空数组,则在一切情况下都会返回true,这个方法并不会改变原数组

3、some

方法参考文献

调用

const boolean = arr.some((value, index, arr) => {
  return value==2
})

这个数组方法有点类似短路运算||,可以当作是一个数组验假的方法,这个方法里面有个回调函数,这个回调函数有三个参数,第一个是测试的数组每一项,第二个是测试数组每一项的下标索引,第三个是测试的原数组

测试数组的每一项都会执行some()方法里面的回调函数,这个函数是用来校验数组的每一项是否有一个满足指定条件,数组每一项都会执行一次回调函数,如果数组里面的所有项都不满足指定条件,则返回false,但凡数组里有一项满足条件,则立即返回true

Tips 如果测试的是空数组,则在一切情况下都会返回false,注意这个方法没有找到一个满足条件的数组项,就会一直执行下去,如果找到一个满足条件的数组项,则会立即返回true,后面的数据就不会再执行

4、map

方法参考文献

调用

const newArr = arr.map((value, index, arr) => {
  return value==2
})

这个数组方法会返回一个新数组,数组的结果是数组每一项执行回调函数后的结果的集合,这个方法的回调函数有三个参数,第一个是测试的数组每一项,第二个是测试数组每一项的下标索引,第三个是测试的原数组

测试数组每一项都会执行回调函数,并把执行的结果追加到一个新数组里面,然后返回这个新数组,这个新数组的每一项都是执行回调函数后的结果集

Tips 这个方法并会改变原数组,但是可以在 callback 执行时改变原数组

5、filter

方法参考函数

调用

const newArr = arr.filter((value, index, arr) => {
  return value==2
})

这个数组方法会返回一个新数组,新数组的结果是测试数组的每一项执行回调函数过滤筛选后满足条件的结果集,这个方法的回调函数有三个参数,第一个是测试的数组每一项,第二个是测试数组每一项的下标索引,第三个是测试的原数组

这个方法就相当于于一个过滤器,筛选器,测试数组每一项都会指定回调函数,但是只有满足指定结果的项才可以被添加到新数组,并返回,不满足的则被过滤掉,如果都不满足,则返回一个空数组

Tips 不会改变原数组,它返回过滤结果的新数组

6、reduce

方法参考文献

调用

const result = arr.reduce((count, value, index, arr) => {
  return count + value
},initCount)

这个数组方法会返回一个数组每一项累加的结果值,这个方法有两个参数:

第一个是回调函数,这个回调函数有四个参数,第一个是数组项每一次执行时上一次执行的累计结果,或者用户自定义的初始累计结果,第二个是测试的数组每一项,第三个是测试数组每一项的下标索引,第四个是测试的原数组

第二个参数是初始累计结果,这个是用户自定义的,如果定义了,则初始化执行时用这个值去累加数组第一项,并将累加的结果值作为回调函数的第一个参数用于第二次累计的一个参数,依次循环下去,如果没有,则默认数组第一项

方法异同点:

1、forEach是遍历循环数组每一项,没有返回结果,reduce是将数组每一项累计并返回最终累积值

2、everysome是返回一个布尔值,两者是相反的,前者是所有为真,才返回true,不会终止后面项的执行,后者是只要有一项为真,则立即返回true,并结束后面项的执行

3、mapfilter是返回一个新数组,前者是返回数组每一项的计算结果的数组,后者是返回一个满足条件项的计算结果的数组

4、以上方法都不会改变原数组

猜你喜欢

转载自www.cnblogs.com/zjh-study/p/10954104.html