通过js把一个数组修改成多层嵌套多个数组的几种方法

1、首先一级与二级相同的嵌套

let arr = [
     { date: '2020-01-06', age: '18'},
     { date: '2020-01-06', age: '25'},
     { date: '2020-01-07', age: '34'},
     { date: '2020-01-07', age: '18'},
     { date: '2020-01-07', age: '38'},
     { date: '2020-01-08', age: '26'},
     { date: '2020-01-09', age: '24'}
   ]
let dataArr = [];
    arr.map(mapItem => {
      if (dataArr.length == 0) {
          dataArr.push({ date: mapItem.date, List: [mapItem] })
      } else {
         let res = dataArr.some(item=> {//判断相同日期,有就添加到当前项
          if (item.date == mapItem.date) {
            item.List.push(mapItem)
            return true
          }
        })
        if (!res) {//如果没找相同日期添加一个新对象
          dataArr.push({ date: mapItem.date, List: [mapItem] })
        }
      }
    })

结果

dataArr = [
        {
            date:'2020-01-06',
            List: [
                { date: '2020-01-06', age: '18'},
                { date: '2020-01-06', age: '25'}
            ]
        },
        {
            date:'2020-01-07',
            List: [
                { date: '2020-01-07', age: '34'},
                { date: '2020-01-07', age: '18'},
                { date: '2020-01-07', age: '38'},
            ]
        },
        {
            date:'2020-01-08',
            List: [
                 { date: '2020-01-08', age: '26'},
            ]
        },
        {
            date:'2020-01-09',
            List: [
                { date: '2020-01-09', age: '24' }
            ]
        }
    ]

第二种情况:一级四位数(0001),二级八位数字(00010001)获取的条件是通过一级的四位数字匹配二级的前四位数字
方法1:

var userArr = [
  { id: "0001", userName: "laozhang_1" },
  { id: "00010001", userName: "laozhang1" },
  { id: "00010002", userName: "laozhang1" },
  { id: "00010003", userName: "laozhang1" },
  { id: "0002", userName: "laowang" },
  { id: "00020002", userName: "laozhang2" },
  { id: "00020003", userName: "laowang" },
  { id: "00020004", userName: "laowang" },
  { id: "00020005", userName: "laowang" },
  { id: "00020006", userName: "laowang" }
];
let newArr = []
 userArr.forEach(item => {
   if (item.id.length === 4) {
     newArr.push({ ...item, list: [] });
  }
 });
newArr.forEach(item => {
  userArr.forEach(user => {
     if (item.id !== user.id && item.id == user.id.substring(0, 4)) {
      item.list.push(user);
    }
  });
 });

console.log(newArr)

方法2:

var userArr = [
  { id: "0001", userName: "laozhang_1" },
  { id: "00010001", userName: "laozhang1" },
  { id: "00010002", userName: "laozhang1" },
  { id: "00010003", userName: "laozhang1" },
  { id: "0002", userName: "laowang" },
  { id: "00020002", userName: "laozhang2" },
  { id: "00020003", userName: "laowang" },
  { id: "00020004", userName: "laowang" },
  { id: "00020005", userName: "laowang" },
  { id: "00020006", userName: "laowang" }
];
let newArr = userArr.filter(item => item.id.length === 4)
newArr.forEach(item => {
      item.list = userArr.filter(user => item.id !== user.id && item.id == user.id.substring(0, 4))
    })
    console.log(newArr)

总结:学好js基础很重要

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端代码の搬运工

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

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

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

打赏作者

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

抵扣说明:

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

余额充值