首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过id删除数组中的对象?

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

Stack Overflow用户
提问于 2022-04-05 09:48:02
回答 3查看 71关注 0票数 -2
代码语言:javascript
复制
const myArrayOfObjects = [
  {id: 1, children: [{id: 2, children: [{id: 3}]}]},
  {id: 4, children: [{id: 5}]},
  {id: 6, children: [{id: 7}]}
]

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-05 10:13:47

  1. 您的数据结构充满了错误。缺少括号、排字等,所以您需要先修复这些。您可以使用像JSCompress这样的工具来指出错误。
  2. 使用一个递归函数,它接受一个对象数组和一个id,在数组上循环,并检查id。如果对象id与参数id相同,则splice输出该对象。
  3. 然后,如果对象有子对象,则将该数组传回函数并重复该进程。
  4. 最后,返回更新的数组。

代码语言:javascript
复制
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));

票数 0
EN

Stack Overflow用户

发布于 2022-04-05 09:51:40

可以使用indexOf()查找数组的索引,并将该索引与.splice()一起使用以删除元素。

票数 0
EN

Stack Overflow用户

发布于 2022-04-05 10:32:14

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

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71749590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档