如何高效的处理数组映射

  • 在处理数据的时候,经常需要对数据进行过滤和遍历,以便把数据转换成符合我们要求的格式,比如下面的场景:

过滤掉名字为空的数据,如果年龄小于18,设置disabled: true,大于等于18,设置disabled: false

// 原始数据
[{name: '小明', age: 15}, {name: '张三', age: 18}, {name: '李四', age: 20}, {name: '', age: 30}]

// 转换后数据
[{name: '小明', age: 15, disabled: true}, {name: '张三', age: 18, disabled: false}, {name: '李四', age: 20, disabled: false}]

  • 对于大多数开发者来说,首先能想到的方法应该是filter和map。
[{name: '小明', age: 15}, {name: '张三', age: 18}, {name: '李四', age: 20}, {name: '', age: 30}].filter(item => item.name).map(item => ({...item, disabled: item.age >= 18 ? false : true}))

虽然这种方式要遍历两次,不过个人觉得还算简单,那能不能遍历一次就能解决呢。显然是可以的,使用Array.flatMap()

[{name: '小明', age: 15}, {name: '张三', age: 18}, {name: '李四', age: 20}, {name: '', age: 30}].flatMap(item => item.name ? [{...item, disabled: item.age >= 18 ? false : true}] : [])

20220224172617

flatMap更像是map和filter的结合体,但flatMap的功能更强大一些,它让我们可以更细微的操作数组中的每一项,比如:

const arr = [1,3].flatMap(number => {
  return [number, 2 * number, 3 * number];
})

// [1, 2, 3, 3, 6, 9]

flatMap的工作方式很简单,他会对数组中的每一项进行一次扁平化处理,因此示例返回的等价于[...[1,2,3], ...[3,6,9]]。如果要拍平一个二维数组,可以直接使用[[2,3],4].flatMap(item => item),当然拍平数组最简单的方式是用[[2,3],4].flat(Infinity)

如何高效的处理数组映射首发于聚享小站,如果对您有帮助,不要忘记点赞支持一下呦🎉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值