通过 id 整理数据: Array+json 记录小案例 [找人问了怎么格式化]

2019-12-31 17:54:41 +08:00
 Aitmo
《菜鸟小前端》

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

// 处理数组中的 json 数据,根据相同 id 将一层 json 数据中的二层 json 集合到一起
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;
}



682 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/633995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX