当前位置: 首页 > 知识库问答 >
问题:

javascript - 怎么根据id递归多维数组?

乔丁雨
2023-05-04

image.png,该数组是一维数组,第一层节点是parent:# 第二层根据第一层id和
第二层parent进行比较,以此类推

共有4个答案

唐修诚
2023-05-04

var a:any = [{ id: 1, name: 3, pid: -1, children: [] }];
const map = new Map();

// 将所有的记录以下方便取
for (const t of a) {
map.set(t.id, t);
t.children = [];
}

// 遍历添加子元素
for (const t of a) {
if (t.pid !== -1) {

const e = map.get(t.pid);
e.children.push(e);

}
}

console.log(map);

// 从map里面去除pid为

var a = [
  { id: "-1", parent: "#", text: "1" },
  { id: "1", parent: "#", text: "2" },
  { id: "2", parent: "4", text: "3" },
  { id: "3", parent: "2", text: "4" },
  { id: "4", parent: "6", text: "5" },
];
const map = new Map();

// 将所有的记录以下方便取
for (const t of a) {
  map.set(t.id, t);
  t.children = [];
}
map.forEach((t) => {
  if (t.parent !== "#") {
    const parent = map.get(t.parent);
    if (parent) {
      parent.children.push(t);
    }
  }
});
const result = [];
map.forEach((e) => {
    result.push(e);
});

console.log(result);

// 从map里面去除pid为
束福
2023-05-04
function toTree(data) {
    const res = [];
    const map = {};
    data.forEach((item) => {
        map[item.id] = item
    })
    data.forEach((item) => {
        let parentItem = map[item.parent];
        if(parentItem) {
            (parentItem.children || (parentItem.children = [])).push(item)
        } else {
            res.push(item)
        }
    })
    return res
}
苏志
2023-05-04
var arr = [
      { id: '-1', parent: '#', text: '1' },
      { id: '1', parent: '#', text: '2' },
      { id: '2', parent: '4', text: '3' },
      { id: '3', parent: '2', text: '4' },
      { id: '4', parent: '6', text: '5' }
];
console.log(sum(0, arr));

function sum(index,data) {
      if(!data[index+1]) return 'no';
      if(data[index].id == data[index+1].parent) return data[index+1];
      return sum(index+1,data);
}
申屠弘图
2023-05-04
let arr = [{id:"-1",parent:"#",text:'请选择'},{id:"1",parent:"#",text:'刑事'},{id:"2",parent:"1",text:'安全罪'}];
let arrToTree =(arr, parent='#')=> {
    let obj = arr.reduce((acc,cur)=>{
       // 根据parent 判断是否相等来归类。true 当前级别
        acc[cur.parent == parent].push(cur);
        return acc;
    },{true:[],false:[]})
    // 当前级别
    let currentArr = obj[true];
     // 其他级别
    let otherArr = obj[false];
   return currentArr.map(item=>{
       // 递归得到子级
        let children = arrToTree(otherArr, item.id);
        return {...item, children};
    })
}
arrToTree(arr, '#');

image.png

 类似资料:
  • 问题内容: 我有一个代表多维数据的一维对象数组: 我应该如何将其转换为多维数组: 问题答案: 以下代码示例 将 数组转换为您要查找的树结构: 如果 现有的 父ID为,则此方法无效。但是可以很容易地更改以反映这一点。 编辑: 那么这是如何工作的呢?这利用了PHP变量别名(也称为引用)和(临时)数组,这些数组用于将a)别名存储到节点()和b)来建立新的树顺序()。 你能[…]解释的目的,并取消设置?

  • 问题内容: 我正在寻找一个函数,该函数需要一个页面/类别的数组(来自平面数据库结果),并根据父ID生成一个嵌套的页面/类别的数组。我想递归地执行此操作,以便可以进行任何级别的嵌套。 例如:我在一个查询中获取所有页面,这就是数据库表的样子 这是我要最终在视图文件中处理的数组: 我已经看过并尝试过几乎遇到的所有解决方案(Stack Overflow上有很多解决方案,但是没有运气得到足够通用的东西同时适

  • 接口传参的时候需要给后端传的参数是数组 大概是这样的: 在这弹窗里面,点击弹窗下面的保存按钮调接口,需要把每一行的单位代码和总人口作为参数传过去,还要判断一下id,这条数据有id的话就传id,没有id的话就不传id 只传单位代码和总人口 请问接口传参应该怎么传多维数组,把每一行的单位代码和总人口传给后端,还有判断id应该怎么去操作呢?

  • 目前想使用codeigniter4框架对下面的数据进行验证 验证用的代码如下 目前对于上述组合来说,运行后是不会得到任何错误的,但我希望是costDepartment的每个元素都对departmentId和percentage进行相应的检查,即按照上述测试用例应该会告诉我有percentage是需要填写的,请问这个需要怎么进行修改,谢谢。

  • 问题内容: 我有一个树结构,其中每个都有一个父级和一个。每个节点都有一个,我想在其中选择进行查询,即该节点和所有父节点的标题。如何编写此查询? 单个标题的查询就是这样,但是就像我说的那样,我希望它扩展到整个父母分支。 干杯 尼克 问题答案: 您不能使用HQL进行递归查询。看到这个。如前所述,它甚至不是标准的SQL。您有两种选择: 编写特定于供应商的递归本机SQL查询 进行多个查询。例如: 我肯定会

  • 要求写一个方法,匹配上id后,联同祖类所有的id都获取到放到数组返回