数组对象和数组对象里的数组对象数据应该如何转换?

问题遇到的现象和发生背景
将a转换为b,麻烦帮忙写的详细点,谢谢

 a : [
    {
         users: [
            {
                userId: 1,
                codeId":11112222,
                
            },
            {
                userId: 2,
                codeId":11112222,
            }
        ],
        startTime: 1,
        endTime: 2
    }
]

 b : [
      {
        nodes:[
          {
        "codeId": "11112222",
        "List": []
         },
        ],
      arr: [startTime, endTime], 
     },
    
]
 

 

用下面的方法转换数组对象:


let a = [    {         users: [            {                userId: 1,                codeId":11112222,
                
            },
            {
                userId: 2,
                codeId":11112222,            }        ],
        startTime: 1,
        endTime: 2
    }
];

let b = a.map(item => {
    let nodes = item.users.map(user => ({
        codeId: user.codeId,
        List: [{ userId: user.userId.toString() }]
    }));
    return {
        nodes,
        arr: [item.startTime, item.endTime]
    };
});

代码中使用了 Array.map() 方法将 a 数组中的每个对象转换成 b 数组中的每个对象。


const b = a.map(obj => {
  const nodes = obj.users.map(user => {
    const codeId = user.codeId;
    return {
      codeId,
      List: [{ userId: user.userId.toString() }]
    };
  });
  return {
    nodes,
    arr: [obj.startTime, obj.endTime]
  };
});

该代码使用 map 函数遍历数组 a,对于每一个元素,我们使用一个内部的 map 函数对它的 users 字段进行处理,以生成数组 nodes。然后我们返回一个包含该数组和 arr 字段的对象。

首先,两个数组的转化可以看成是一个矩阵变换,将A矩阵变换成B矩阵。中间的对象变换函数即我们所需求的变换矩阵。
具体的做法即是,观察a,b两个内部对象的数据结构,对数据结构进行分析,下面以kotlin代码为例,js算法类似

fun main(args: Array<String>) {
    val a = """[{
            users : [
            {
                userId: 1,
                codeId:11112222,
            },
            {
                userId: 2,
                codeId:11112222,
            }
            ],
            startTime: 1,
            endTime: 2
    }]"""
    // 对a矩阵进行JSON解析,得到里面的对象
    val arr = JSONArray(a)
    val b = arr.map { json ->
        // 映射函数,进行解析映射
        json as JSONObject
        val users = json.getJSONArray("users")
        // 对users 提取共同的codeId,进行user分组。
        val codeMap = users.groupBy{ item ->
            item as JSONObject
            item.getStr("codeId")
        }
        // 由分组进行构造目标所需要的数据结构
        val nodeArr = codeMap.map {
            val nodeObj = JSONObject()
            nodeObj.set("code", it.key)
            nodeObj.set("List",it.value.map {item ->
                item as JSONObject
                val itemObj = JSONObject()
                itemObj.set("userId",item.getStr("userId"))
                itemObj
            })
        }

        // 构造最终的数据结构
        val objB = JSONObject()
        objB.set("nodes",nodeArr)
        objB.set("arr", listOf(json["startTime"],json["endTime"]))
        objB
    }
    println(b)
}

该回答引用ChatGPT
参考下面代码

const a = [    {        users: [            {                userId: 1,                codeId: "11112222"            },            {                userId: 2,                codeId: "11112222"            }        ],
        startTime: 1,
        endTime: 2
    }
];

const b = a.map(item => {
    const nodes = item.users.map(user => ({
        codeId: user.codeId,
        List: [{ userId: user.userId }]
    }));

    return {
        nodes,
        arr: [item.startTime, item.endTime]
    };
});

console.log(b);