从递归 JSON 中更新节点

问题描述 投票:0回答:1

下面是我的递归结构,我需要删除任何 id 匹配的节点。我一直在努力让这个完全适合我的

deleteNode(explorerData, itemId, isFolder)
功能。

这应该返回一棵删除了节点的树。如果需要,这是 CodeSandbox 的 link,但这不是真的需要

const explorer = {
  id: "1",
  name: "root",
  isFolder: "true",
  items: [
    {
      id: "2",
      name: "public",
      isFolder: "true",
      items: [
        { id: "3", name: "index.html", isFolder: false, items: [] },
        { id: "4", name: "style.css", isFolder: false, items: [] }
      ]
    },
    {
      id: "5",
      name: "app.js",
      isFolder: false,
      items: []
    },
    {
      id: "6",
      name: "src",
      isFolder: true,
      items: [
        {
          id: "7",
          name: "components",
          isFolder: true,
          items: [
            {
              id: "8",
              name: "Folder.js",
              isFolder: false,
              items: []
            }
          ]
        }
      ]
    }
  ]
};

javascript reactjs recursion
1个回答
0
投票

const explorer = {"id":"1","name":"root","isFolder":"true","items":[{"id":"2","name":"public","isFolder":"true","items":[{"id":"3","name":"index.html","isFolder":false,"items":[]},{"id":"4","name":"style.css","isFolder":false,"items":[]}]},{"id":"5","name":"app.js","isFolder":false,"items":[]},{"id":"6","name":"src","isFolder":true,"items":[{"id":"7","name":"components","isFolder":true,"items":[{"id":"8","name":"Folder.js","isFolder":false,"items":[]}]}]}]}

const f = ({items, ...rest}, idMatch) =>
  ({...rest, items:items.filter(i=>+i.id!==+idMatch).map(i=>f(i, idMatch))})

console.log(f(explorer, 2))

© www.soinside.com 2019 - 2024. All rights reserved.