js数据筛选、去重、分类

数据描述

 const list = [
    { id: 1, name: '大连1', year: 2023 },
    { id: 2, name: '大连2', year: 2025 },
    { id: 3, name: '大连3', year: 2023 },
    { id: 4, name: '大连4', year: 2027 },
    { id: 5, name: '大连5', year: 2023 },
    { id: 6, name: '大连6', year: 2023 },
    { id: 7, name: '大连路', year: 2023 }
  ]

需求1:筛选出现的年份

 const result = new Set(list.map((item) => item.year))
 
 console.log('result', result)

结果:
在这里插入图片描述
进一步优化,改成数组形式:

const result = [...new Set(list.map((item) => item.year))]

在这里插入图片描述

需求2:筛选出各年份的第一条数据

在这里插入图片描述

法一 reduce+includes

 let yearsList = []

  const uniquList = list.reduce((pre, item) => {
    if (!yearsList.includes(item.year)) {
      pre.push(item)
      yearsList.push(item.year)
    }
    return pre
  }, [])
  console.log('uniquList', uniquList)

法2 forEach+some

在这里插入图片描述

  let uniquList = []
  list.forEach((item) => {
    if (!uniquList.some((itemCon) => itemCon.year === item.year)) {
      uniquList.push(item)
    }
  })
  console.log('uniquList', uniquList)

法3 reduce+find

  const result = list.reduce((pre, item) => {
    if (!pre.find((itemCon) => itemCon.year === item.year)) {
      // if (!pre.some((itemCon) => itemCon.year === item.year)) {
      //   yearList.push(item.year)
      pre.push(item)
    }
    return pre
  }, [])
  console.log('result', result)

需求3:按照年份分类

在这里插入图片描述

法一 reduce + includes

 let yearsList = []
  const uniquList = list.reduce((pre, item) => {
    if (!yearsList.includes(item.year)) {
      pre[item.year] = [{ item }]
      yearsList.push(item.year)
    } else {
      pre[item.year].push(item)
    }
    return pre
  }, {})

法2 forEach+includes

// 用上面的some方法也可以实现

 let yearsList = []
  let result = {}
  list.forEach((item) => {
    if (!yearsList.includes(item.year)) {
      result[item.year] = [{ item }]
      yearsList.push(item.year)
    } else {
      result[item.year].push(item)
    }
  })

法3 reduce+in

in 操作符用于检查对象中是否存在指定的属性

  const uniquList = list.reduce((pre, item) => {
    if (item.year in pre) {
      pre[item.year].push(item)
    } else {
      //   pre[item.year].push(item)  不能这么写
      pre[item.year] = [{ item }]
    }
    return pre
  }, {})
  console.log('uniquList', uniquList)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值