所以这是一个社交媒体 comments ,有两个家长 comments ,comment#2有两个子元素 comments .

[
{
    "id": 1,
    "content": "Impressive! Though it seems the drag feature could be improved. But overall it looks incredible. You've nailed the design and the responsiveness at various breakpoints works really well.",
    "createdAt": "1 month ago",
    "score": 12,
    "user": {
        "image": {
            "png": "./images/avatars/image-amyrobson.png",
            "webp": "./images/avatars/image-amyrobson.webp"
        },
        "username": "amyrobson"
    },
    "replies": ["
},
{
    "id": 2,
    "content": "Woah, your project looks awesome! How long have you been coding for? I'm still new, but think I want to dive into React as well soon. Perhaps you can give me an insight on where I can learn React? Thanks!",
    "createdAt": "2 weeks ago",
    "score": 5,
    "user": {
        "image": {
            "png": "./images/avatars/image-maxblagun.png",
            "webp": "./images/avatars/image-maxblagun.webp"
        },
        "username": "maxblagun"
    },
    "replies": [
        {
            "id": 3,
            "content": "If you're still new, I'd recommend focusing on the fundamentals of HTML, CSS, and JS before considering React. It's very tempting to jump ahead but lay a solid foundation first.",
            "createdAt": "1 week ago",
            "score": 4,
            "replyingTo": "maxblagun",
            "user": {
                "image": {
                    "png": "./images/avatars/image-ramsesmiron.png",
                    "webp": "./images/avatars/image-ramsesmiron.webp"
                },
                "username": "ramsesmiron"
            }
        },
        {
            "id": 4,
            "content": "I couldn't agree more with this. Everything moves so fast and it always seems like everyone knows the newest library/framework. But the fundamentals are what stay constant.",
            "createdAt": "2 days ago",
            "score": 2,
            "replyingTo": "ramsesmiron",
            "user": {
                "image": {
                    "png": "./images/avatars/image-juliusomo.png",
                    "webp": "./images/avatars/image-juliusomo.webp"
                },
                "username": "juliusomo"
            }
        }
    "
}

"

我正在试图弄清楚如何删除子注释并在相同的parent>child设置中返回array.

现在,在点击注释上的delete按钮时,我运行一个函数,循环遍历父注释,过滤掉与所点击注释ID匹配的父注释,

    let filteredComments = [";

function handleClick(e) {
    setLoading(true);
    for (let i = 0; i < comments.length; i++) {
        if (comments[i".id !== Number(e.target.id)) {
            filteredComments = [...filteredComments, comments[i"";
        }
    }

    console.log(filteredComments);
    // setComments(...comments, filteredComments);
    setTimeout(() => {
        setLoading(false);
    }, 1000);
}

这将返回与上面的原始data.json条注释相同的array.我试图删除的 comments 是id4,并且是一个子 comments .我try 了十几种不同的方法来遍历子 comments ,但我不知道如何只返回与所选 comments id不匹配的子 comments ,并以同样的parent>child方式返回对象(有一次我让它返回一个数组,其子 comments 紧挨着父 comments ,这会搞砸 comments 到页面的映射).

我try 的最后一件事是循环遍历父注释,将它们推送到过滤数组中,然后循环遍历过滤数组中任何注释的子注释.

    let filteredComments = [";

function handleClick(e) {
    setLoading(true);
    for (let i = 0; i < comments.length; i++) {
        if (comments[i".id !== Number(e.target.id)) {
            filteredComments = [...filteredComments, comments[i"";
        }
    }


    if (comments[i".replies.length !== 0) {
        for (let k = 0; k < comments[i".replies.length; k++) {
            if (comments[i".replies[k".id !== Number(e.target.id)) {
                filteredComments = [
                    ...filteredComments,
                    comments[i".replies[k",
                ";
            }
        }
    }

    console.log(filteredComments);
    // setComments(...comments, filteredComments);
    setTimeout(() => {
        setLoading(false);
    }, 1000);
}

推荐答案

如果有更深层次的回复(我添加了注释ID:5),这段代码应该递归地处理删除:

const comments = [{
    "id": 1,
    "content": "Impressive! Though it seems the drag feature could be improved. But overall it looks incredible. You've nailed the design and the responsiveness at various breakpoints works really well.",
    "createdAt": "1 month ago",
    "score": 12,
    "user": {
      "image": {
        "png": "./images/avatars/image-amyrobson.png",
        "webp": "./images/avatars/image-amyrobson.webp"
      },
      "username": "amyrobson"
    },
    "replies": []
  },
  {
    "id": 2,
    "content": "Woah, your project looks awesome! How long have you been coding for? I'm still new, but think I want to dive into React as well soon. Perhaps you can give me an insight on where I can learn React? Thanks!",
    "createdAt": "2 weeks ago",
    "score": 5,
    "user": {
      "image": {
        "png": "./images/avatars/image-maxblagun.png",
        "webp": "./images/avatars/image-maxblagun.webp"
      },
      "username": "maxblagun"
    },
    "replies": [{
        "id": 3,
        "content": "If you're still new, I'd recommend focusing on the fundamentals of HTML, CSS, and JS before considering React. It's very tempting to jump ahead but lay a solid foundation first.",
        "createdAt": "1 week ago",
        "score": 4,
        "replyingTo": "maxblagun",
        "user": {
          "image": {
            "png": "./images/avatars/image-ramsesmiron.png",
            "webp": "./images/avatars/image-ramsesmiron.webp"
          },
          "username": "ramsesmiron"
        }
      },
      {
        "id": 4,
        "content": "I couldn't agree more with this. Everything moves so fast and it always seems like everyone knows the newest library/framework. But the fundamentals are what stay constant.",
        "createdAt": "2 days ago",
        "score": 2,
        "replyingTo": "ramsesmiron",
        "user": {
          "image": {
            "png": "./images/avatars/image-juliusomo.png",
            "webp": "./images/avatars/image-juliusomo.webp"
          },
          "username": "juliusomo"
        },
        "replies": [{
          "id": 5,
          "content": "Even deeper comment",
          "replyingTo": "juliusomo",
          "createdAt": "3 month ago",
          "score": 80,
          "user": {
            "image": {
              "png": "./images/avatars/image-somebody.png",
              "webp": "./images/avatars/image-somebody.webp"
            },
            "username": "somebody"
          },
          "replies": []
        }]
      }
    ]
  }
]



function deleteComment(id, arr) {
  arr.forEach(function(item, index) {
    if (item.id == id) {
      arr.splice(index, 1)
    } else if (item.replies && item.replies.length > 0) {
      deleteComment(id, item.replies)
    }
  })
}

deleteComment(5, comments)

console.log(comments)

Javascript相关问答推荐

如何在不分配整个数组的情况下修改包含数组的行为主体?

React:未调用useState变量在调试器的事件处理程序中不可用

使用AJX发送表单后,$_Post看起来为空

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

如何将Cookie从服务器发送到用户浏览器

在使用HighChats时如何避免Datatables重新初始化错误?

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

查询参数未在我的Next.js应用路由接口中定义

如何将未排序的元素追加到数组的末尾?

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

在不删除代码的情况下禁用Java弹出功能WordPress

图表4-堆叠线和条形图之间的填充区域

为什么我的Navbar.css没有显示在本地主机页面上?

表单数据中未定义的数组键

对不同目录中的Angular material 表列进行排序

JavaScript:多个图像错误处理程序

我们是否可以在reactjs中创建多个同名的路由

在范围数组中查找公共(包含)范围

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

Reaction路由v6.4+数据API:重试加载程序而不显示错误