JS数组迭代( forEach、map、reduce、 filter、some、 every、find)

1. forEach(循环)

  1. forEach 循环在所有元素调用完毕之前是不能停止的,它没有 break 语句
  2. 可用 try catch 语句,就是在要强制退出的时候,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了
  3. forEach 循环可以修改原来的数组
let arr = [1,2,3];
arr.forEach(function(val,index){
 console.log(val,index)
})
// 1 0
// 2 1
// 3 2

2. map(映射)

  1. 跟forEach功能类似,但会返回一个新数组,数组中的元素 由 原始数组元素调用函数处理后的值
  2. map()会分配内存空间存储新数组并返回,forEach()不会返回数据。所以 map()的执行速度 > forEach()的执行速度
let arr = [1,2,3];
let tt = arr.map(function(i){
 i *= 2
 console.log(i)
 return i
})
// [2,4,6]

3. reduce(累计)

  1. 接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
  2. 对于空数组是不会执行回调函数的
function callback(total, currentValue, currentIndex, arr){
	// 计算代码块
}, 
arr.reduce(callback, initialValue)
callback (执行数组中每个值的函数,包含四个参数)

1、total (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、currentIndex (当前元素在数组中的索引)
4、arr (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)

如果没有提供initialValue,reduce 会从索引1(第二个元素)的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始
不设置初始值,调用空数组会报错。
用法:
数组求和:

let arr = [1,2,3];
let sum = arr.reduce((x,y)=>x+y)

计算每个元素出现的次数:

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let nameNum = names.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1 
  }
  return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

数组去重:

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

二维数组转化维数组:

let arr = [[0, 1], [2, 3], [4, 5], 8]
let newArr = arr.reduce((pre,cur)=>{
    return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

多维数组转化一维数组:

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
   return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

resuceRight()函数和reduce类似,不过是倒序

4. filter(过滤)

  1. filter对数组进行过滤,创建一个新数组,新数组中的元素由符合条件的所有元素组成
  2. filter()不会对空数组进行检测、不会改变原始数组
let arr = [1,2,3];
let tt = arr.filter(function(i){
 return i>1;
})
// [2,3]

5. some(是否有一个满足条件)

  1. 检测数组中的元素是否满足指定条件
  2. 如果有一个元素满足条件,则返回true , 剩余的元素不会再执行检测。
  3. 如果没有满足条件的元素,则返回false。
let arr = [1,2,3];
let tt = arr.some(function(i){
 return i>1;
})
// true

6. every(是否所以都满足条件)

  1. 检测数组所有元素是否都符合指定条件
  2. 如果数组中检测到有一个元素不满足,则返回 false ,且剩余的元素不会再进行检测。
  3. 如果所有元素都满足条件,则返回 true。
let arr = [1,2,3];
let tt = arr.every(function(i){
 return i>0;
})
// true

7. indexOf(搜索元素值返回位置)

// 语法: array.indexOf(item, start) --------- item 搜索的值, start 从哪里开始
let fruits = ["Apple", "Orange", "Apple", "Mango"]
let a = fruits.indexOf("Apple") // 0

Array.lastIndexOf() 与 Array.indexOf() 类似,但是从数组结尾开始搜索。

8. find(返回符合条件的第一元素值)

老旧的浏览器不支持

var numbers = [4, 9, 16, 25, 29]
var first = numbers.find((value, index, array) => {
  return value > 18
}) // 25

findIndex() 与 find()类似,findIndex() 方法返回符合条件的第一个元素的索引

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百事可爱-后悔下凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值