处理数据 根据 pid 添加到父级 children

javascript 复制代码
let data = [
  { id: 1, name: "123", pid: 1 },
  { id: 2, name: "123", pid: 1 },
  { id: 3, name: "123", pid: 1 },
  { id: 4, name: "123", pid: 2 },
  { id: 5, name: "123", pid: 1 },
  { id: 6, name: "123", pid: 2 },
  { id: 7, name: "123", pid: 1 },
  { id: 8, name: "123", pid: 2 },
  { id: 9, name: "123", pid: 1 },
]
let result = [];  // 存储最终结果的数组

data.forEach(item => {
  // 获取到元素父级
  let parent = data.find(element => element.id === item.pid);

  let index = result.findIndex(i => i.id === parent.id);
  // 不存在就将父级 添加 进 result数组中
  if (index === -1) {
    result.push(parent);
  }

  // 判断当前元素是否和父级一致,一致就没必要再次添加
  if(item.id != parent.id){
    if (!parent.children) {
      parent.children = [];
    }
    parent.children.push(item);
  }
});

console.log(result);
相关推荐
BD_Marathon几秒前
【JavaWeb】NPM_简介和相关配置
前端·npm·node.js
咸鱼加辣4 分钟前
【前端框架】react
前端·react.js·前端框架
unicrom_深圳市由你创科技4 分钟前
Vue 3 高效开发技巧总结
前端·javascript·vue.js
HIT_Weston7 分钟前
66、【Ubuntu】【Gitlab】拉出内网 Web 服务:Gitlab 配置审视(十)
前端·ubuntu·gitlab
长空任鸟飞_阿康10 分钟前
LangChain 技术栈全解析:从模型编排到 RAG 实战
前端·python·langchain
chilavert31812 分钟前
技术演进中的开发沉思-258 Ajax:自定义事件
前端·ajax·okhttp
chilavert31813 分钟前
技术演进中的开发沉思-259 Ajax:浏览器历史管理
javascript·ajax·okhttp·状态模式
南知意-17 分钟前
从零搭建 Live2D 看板娘教程(自建API避墙版)
服务器·前端·vue.js·开源·博客·美化·看板娘
来杯三花豆奶24 分钟前
Vue 2 中 Store (Vuex) 从入门到精通
前端·javascript·vue.js
四瓣纸鹤24 分钟前
从vue2和vue3的区别聊起
vue.js·状态模式