【JS】根据数组对象的属性值把 一维数组转为二维数组

本文介绍了两种将一维数组按特定属性转换为二维数组的方法。一种是通过遍历数组并使用indexOf查找时间属性的方式;另一种是利用对象映射的方式实现。文章详细解释了两种方法的实现原理和步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下例子是根据time属性把一维数组转为二维数组。

先定义一个数组:

const array = [
    {
        id: 123,
        time: '2018-7',
        name: 'aaa'
    },
    {
        id: 123,
        time: '2018-8',
        name: 'aaa'
    },
    {
        id: 123,
        time: '2018-8',
        name: 'aaa'
    },
    {
        id: 123,
        time: '2018-8',
        name: 'aaa'
    },
    {
        id: 123,
        time: '2018-9',
        name: 'aaa'
    },
    {
        id: 123,
        time: '2018-9',
        name: 'aaa'
    },
    {
        id: 123,
        time: '2018-11',
        name: 'aaa'
    }
]

我的写法:

function translateArray(arr) {
    let timeArr = []
    let newArray = []
    array.forEach(curArr => {
        const index = timeArr.indexOf(curArr.time)
        if (index > -1) {
            newArray[index].push(curArr)
        } else {
            timeArr.push(curArr.time)
            const length = newArray.length
            newArray[length] = []
            newArray[length].push(curArr)
        }
    })
    return newArray
}

我的写法比较傻瓜式(`・ω・´),应该一看就懂了。

我们再来看看别人的写法:

function translateArray (array) {
  let map1 = {}
  while(array.length) {
    let current = array.pop() // 会影响原数组
    map1[current.time] = map1[current.time] || []
    map1[current.time].push(current)
  }

  return Object.keys(map1).map(key => map1[key])
}

好像,,,一下子没看懂「(゚ペ),没关系,我们来慢慢理解:

其实主要是理解return那里做了什么事。首先,map1是一个对象,它的属性名就是我们的time(我的写法是把不同的时间存到一个数组中,判断数组中有没有这个值)。再看看return做了什么,Object.keys(map1)返回的是一个数组,数字的每一项是map1的属性,及这是一个time数组,遍历这个time数组,map中返回的就是相同时间的数组,最后我们就得到一个二维数组了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值