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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a13145211/article/details/104973859

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基础很重要

 

posted @   雪莉06  阅读(3635)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示