gpt4 book ai didi

javascript - 在 JavaScript 中递归以在重 JSON 中搜索

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:31 24 4
gpt4 key购买 nike

我正面临一个算法概念问题。使用 JavaScript 语言,我有一个大约 11 000 行的重 JSON 对象,这是一个 HTML 文件转换的结果。 JSON 的结构类似于 DOM 的结构,这意味着一个 Object 可以有一个属性 children,一种由其他类似 Object 组成的数据结构。目标是在 JSON 中搜索并提取具有该属性的对象的属性 itemprop 的信息。 itemprop 属性在 attributes 属性中,Object 中有一些首先提到的 Object 具有。

对象结构

{ type: 'x',
tagName: 'y',
attributes: { "itemprop" : "valueWanted" },
children:
[ Object, Object, Object]
}

我想到了一个递归算法来求解。不幸的是,我不熟悉递归,下一个代码无法运行。

递归算法

var searchAttributesRecursive = function(children) {
for (var i = 0; i < children.length; ++i) {
if (children[i].hasOwnProperty('children')) {
return searchAttributesRecursive(children[i].children);
}
else {
if (children[i].hasOwnProperty('attributes')) {
if (children[i].attributes.itemprop === "valueWanted") {
console.log('success')
}

}
}
return; // probably a problem that breaks the loop
}
};

searchAttributesRecursive(startingChildren);

也许还有另一种更有效的通用算法来完成这项任务。我乐于接受建议。

更新

感谢您提供的所有解决方案和解释。更具体地说,看看@ChrisG 的简单解决方案。现在,我想在算法中添加一个特殊条件。

如果我想从下一个对象检索数据,在对象具有 wantedValue2 的子对象范围之外,您知道我如何访问这些数据吗?该算法会有一个特殊情况,它满足 wantedValue2,并且不想直接提取 itemprop 的数据。

对象结构特例

{
"type": "",
"tagName": "",
"attributes": {
"itemprop": "wantedValue"
},
"children": [{
"type": "",
"content": ""
}
]
},
{
"type": "",
"content": ""
}]
},
{
"type": "",
"tagName": "",
"attributes": {},
"children": [
{
"type": "",
"content": "here"
}
]

最佳答案

这是一个较短的版本:

请注意,该函数需要一个数组,因此如果您的对象不是数组,则必须使用 findItemprop([dom], "wanted")

function findItemprop(data, value, found) {
if (!found) found = [];
data.forEach((node) => {
if (node.attributes && node.attributes.itemprop == value)
found.push(node);
if (node.children) findItemprop(node.children, value, found);
});
return found;
}

var dom = [{
tag: "root",
children: [{
tag: "header",
children: [{
tag: "div"
}]
}, {
tag: "div",
id: "main",
children: [{
tag: "p",
attributes: {
itemprop: "wanted"
}
}]
}, {
tag: "footer",
children: [{
tag: "span",
content: "copyright 2017",
attributes: {
itemprop: "wanted"
}
}]
}]
}];

console.log(findItemprop(dom, "wanted"));

关于javascript - 在 JavaScript 中递归以在重 JSON 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44336732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com