V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Aitmo
V2EX  ›  问与答

通过 id 整理数据: Array+json 记录小案例

  •  
  •   Aitmo · 2019-12-30 14:01:43 +08:00 · 1073 次点击
    这是一个创建于 1551 天前的主题,其中的信息可能已经有所发展或是发生改变。

    《菜鸟小前端》

    举个栗子: /* 原始数据:/ var arr = [{"id": 1,"user": {"name": "张三"}},{"id": 1,"user": {"name": "李四"}}]; / 转换后 :*/ var arr1 = [{"id": 1,"data": [{"name": "张三"}, {"name": "李四"}]}]

    函数封装 function uniqueArray(arr,type) {//形参 1 数组 形参 2 判断的数据类型 var map = {},//承载判断的集合容器 dest = [],//自定义的数组 keys = [];//动态的 key 值 for (var i = 0; i < arr.length; i++) { var ai = arr[i]; if (!map[ai.id]) {//循环的条件 /动态获取 json 的 key 值/ for (var key in ai) { keys.push(key) } keys = [...new Set(keys)];//将 keys 数组去重 [因为循环了很多次] let obj = {};//obj===ai 添加上承载字段 keys.map((item,id)=>{//动态 key 值操作 [同步] if(typeof ai[keys[id]] == type){//判断数据类型是不是自己要的,例如 object obj.data = [ai[keys[id]]]//判断出的数据放置在 obj 添加的承载字段 }else{ obj[keys[id]] = ai[keys[id]];//将原 ai 的值赋值给重新定义的 obj } }) dest.push(obj);//将 ai 处理为 obj 放置自定义的数组中 /* 已知 json 的 key 值 [被替代] { id: ai.id, createdAt: ai.createdAt, is_root: ai.is_root, name: ai.name, user: [ai.user] }/ map[ai.id] = ai;//通过要处理数据的 id 赋值 map 多重集合 } else { // 如果遇到相同的 id for (var j = 0; j < dest.length; j++) {//通过遍历自定义的新数组 var dj = dest[j]; if (dj.id == ai.id) {//找到与相同 id 的字段数据 keys.map((item,id)=>{//动态 key 值操作 [同步] if(typeof ai[keys[id]] == type){//判断数据类型是不是自己要的,例如 object dj.data.push(ai[keys[id]]);//将判断的数据继续放置相同 id 的字段中的自定义的数组中 } }) / 已知要放置的数据 dj.data.push(ai.user); [被替代] */ break; } } } } return dest; }

    3 条回复    2019-12-31 12:15:52 +08:00
    gbin
        1
    gbin  
       2019-12-30 14:10:03 +08:00 via Android
    ??? 算上本次回复共浪费了 20 秒生命
    wym7223645
        2
    wym7223645  
       2019-12-30 16:53:35 +08:00   ❤️ 1
    格式调整一下应该不会死吧
    Aitmo
        3
    Aitmo  
    OP
       2019-12-31 12:15:52 +08:00
    他自动生成的啊,复制了自己格式化一下,我第一次发,没得经验
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3907 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 178ms · UTC 10:16 · PVG 18:16 · LAX 03:16 · JFK 06:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.