24个JavaScript循环遍历方法,你都知道吗?( 三 )


reduceRight() 方法和的reduce()用法几乎一致 , 只是该方法是对数组进行倒序遍历的 , 而reduce()方法是正序遍历的 。
 let arr = [1, 2, 3, 4]let sum = arr.reduceRight((prev, cur, index, arr) => {console.log(prev, cur, index);return prev + cur;}, 5)console.log(arr, sum);输出结果:
 5 4 39 3 212 2 114 1 0[1, 2, 3, 4] 15注意:

  • 两个方法都不会改变原数组;
  • 两个方法如果添加初始值 , 就会改变原数组 , 会将这个初始值放在数组的最后一位;
  • 两个方法对于空数组是不会执行回调函数的 。
7. find()、findIndex()find() 方法返回通过函数内判断的数组的第一个元素的值 。当数组中的元素在测试条件时返回 true 时 ,  find() 返回符合条件的元素 , 之后的值不会再调用执行函数 。如果没有符合条件的元素返回 undefined 。
findIndex() 方法返回传入一个测试函数符合条件的数组第一个元素位置(索引) 。当数组中的元素在函数条件时返回 true 时 ,  findIndex() 返回符合条件的元素的索引位置 , 之后的值不会再调用执行函数 。如果没有符合条件的元素返回 -1 。
两个方法的语法如下:
 
array.find(function(currentValue, index, arr),thisValue)array.findIndex(function(currentValue, index, arr), thisValue) 
两个方法的第一个参数为回调函数 , 是必传的 , 它有三个参数:
  • currentValue:必需 。当前元素;
  • index:可选 。当前元素的索引;
  • arr:可选 。当前元素所属的数组对象 。
 
let arr = [1, 2, 3, 4, 5]arr.find(item item > 2) // 输出结果: 3let arr = [1, 2, 3, 4, 5]arr.findIndex(item item > 2) // 输出结果: 2 
find()和findIndex()两个方法几乎一样 , 只是返回结果不同:
  • find():返回的是第一个符合条件的值;
  • findIndex:返回的是第一个返回条件的值的索引值 。
注意:
  • 两个方法对于空数组 , 函数是不会执行的;
  • 两个方法否不会改变原数组 。
8. keys()、values()、entries()三个方法都返回一个数组的迭代对象 , 对象的内容不太相同:
  • keys() 返回数组的索引值;
  • values() 返回数组的元素;
  • entries() 返回数组的键值对 。
三个方法的语法如下:
 
array.keys()array.values()array.entries() 
这三个方法都没有参数:
 
let arr = ["Banana", "Orange", "Apple", "Mango"];const iterator1 = arr.keys();const iterator2 = arr.values() const iterator3 = arr.entries() for (let item of iterator1) {console.log(item);}// 输出结果: 0 1 2 3for (let item of iterator2) {console.log(item);}// 输出结果: Banana Orange Apple Mangofor (let item of iterator3) {console.log(item);}// 输出结果:[0, 'Banana'] [1, 'Orange'] [2, 'Apple'] [3, 'Mango'] 
总结:
方法
是否改变原数组
特点
forEach()

没有返回值
map()

有返回值 , 可链式调用
for of

for...of遍历具有Iterator迭代器的对象的属性 , 返回的是数组的元素、对象的属性值 , 不能遍历普通的obj对象 , 将异步循环变成同步循环
filter()

过滤数组 , 返回包含符合条件的元素的数组 , 可链式调用
every()、some()

some()只要有一个是true , 便返回true;而every()只要有一个是false , 便返回false.
find()、findIndex()

find()返回的是第一个符合条件的值;findIndex()返回的是第一个返回条件的值的索引值


推荐阅读