首页 > 解决方案 > 将路径添加到 JSON 属性

问题描述

晚上好。

我有以下 JSON。我想path使用url属性包含树中的位置并记住它可以嵌套很深。我添加了一些评论,但我知道这在纯 JSON 中是不可能的。:)

[
  {
    "url": "articles",
    "path": "...", // should become path: "articles"
    "subitems": [
      {
        "url": "article-one",
        "path": "...",  // should become path: "articles/article-one"
        "subitems": []
      },
      {
        "url": "article-two",
        "path": "...", 
        "subitems": []
      },
    ]
  },
  {
    "url": "homepage",
    "path": "...",
    "subitems": []
  },
  {
    "url": "home",
    "path": "...",    // should become path: "home"
    "subitems": [
      {
        "url": "maintenance",
        "path": "...",     // should become path: "home/maintenance"
        "subitems": []
      },
      {
        "url": "customer-service",
        "path": "...",
        "subitems": []
      },
      {
        "url": "news",
        "path": "...", // should become path: "home/news"
        "subitems": [
          {
            "url": "news-item-1", // should become path: "home/news/news-item-1"
            "path": "...",
            "subitems": []
          }
        ]
      }
    ]
  }
]

有人可以帮我弄这个吗?

太感谢了!

标签: javascriptjson

解决方案


path当循环中的当前元素for...in是对象(typeofobject和 not Array.isArray)时,您可以使用递归函数并添加属性

const data = [{"url":"articles","subitems":[{"url":"article-one","subitems":[]},{"url":"article-two","subitems":[]}]},{"url":"homepage","subitems":[]},{"url":"home","subitems":[{"url":"maintenance","subitems":[]},{"url":"customer-service","subitems":[]},{"url":"news","subitems":[{"url":"news-item-1","subitems":[]}]}]}]

function addPath(data, prev = '') {
  for (let i in data) {
    if (typeof data[i] === 'object') {
      let path = prev;

      if (!Array.isArray(data[i])) {
        data[i].path = path += (path ? '/' : '') + data[i].url
      }

      addPath(data[i], path)
    }
  }
}

addPath(data);
console.log(data)


推荐阅读