javascript - 将路径添加到 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": []
}
]
}
]
}
]
有人可以帮我弄这个吗?
太感谢了!
解决方案
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)
推荐阅读
- html - 如何设置元素水平固定?
- reactjs - 我如何在反应中解决此错误消息?无法读取 null 的属性“详细信息”
- git - 如何将分离的头合并到新分支中,然后将新分支合并为master?
- django - 无法在 Django Rest Framework 中呈现嵌套关系
- python - 在分组条形图中绘制 pandas DataFrame 中不同条目数的平均值
- sorting - Delphi 通用排序优化
- php - Expo takePictureAsync 将照片上传到 Laravel
- html - AMP 电子邮件 - [选中] 绑定属性不会影响复选框状态
- python - Pipenv 在加密包上安装失败:“禁用 PEP 517 处理无效”错误
- lisp - 像在 SLIME 中一样在 LispWorks 中引入之前的表达式