如何通过id删除数组数组中的对象?

How to delete object in arrays of arrays by id?

const myArrayOfObjects = [
  {id: 1, children: [{id: 2, children: [{id: 3}]}]},
  {id: 4, children: [{id: 5}]},
  {id: 6, children: [{id: 7}]}
]

我有一个包含很多对象的数组,这些对象可以有很多子数组,但每个对象都有唯一的键。那么我如何循环遍历主数组并删除一些对象呢?例如 id 为 3

的对象

您可以使用 indexOf() 找到数组的索引,并使用该索引和 .splice() 删除元素

  1. 您的数据结构充满错误。缺少括号、拼写错误等,因此您需要先修复这些问题。您可以使用 JSCompress 之类的工具来指出错误。

  2. 使用一个递归函数,它接受一个对象数组和一个 id,遍历数组并检查 id。如果对象id与参数id相同splice出对象。

  3. 然后,如果对象有子对象,则将该数组传回函数并重复该过程。

  4. 最后 return 更新数组。

const arr=[{id:1,children:[{id:2,children:[{id:3}]}]},{id:4,children:[{id:5}]},{id:6,children:[{id:7,children:[{id:7}]}]}];

function remove(arr, id) {
  for (let i = 0; i < arr.length; i++) {
    const obj = arr[i];
    if (obj.id === id) arr.splice(i, 1);
    if (obj.children) remove(obj.children, id);
  }
  return arr;
}

console.log(remove(arr, 3));

使用递归函数搜索并删除数组中的对象。如果找到元素后子数组为空,则从父对象中删除子 属性。

const arr = [
  {id: 1, children: [{id: 2, children: [{id: 3}]}]},
  {id: 4, children: [{id: 5}]},
  {id: 6, children: [{id: 7, children: [{id: 7}]}]}
];

function findObjectToDelete(array, idToDelete) {
    for(let i=0;i<array.length;i++) {
        const obj = array[i];
        if(obj.id === idToDelete){
            array.splice(i,1);
            break;
        }
        if(obj.children) {
            findObjectToDelete(obj.children, idToDelete);
            if(obj.children.length===0) {
                delete obj.children;
            }
        }
    }
    return array;
}
const newArr = findObjectToDelete(arr,3);
console.log(newArr);