【发布时间】:2021-12-17 18:48:50
【问题描述】:
我试图在这个深层嵌套数组中找到类型等于 question 的所有对象:
{
"uuid": "707a5ffd-68e2-4dbd-b539-128512ba3a0a",
"type": "page",
"items": [
{
"uuid": "9d823429-cc24-444d-a21c-a81357305851",
"title": "1",
"type": "question",
},
{
"type": "section",
"title": "2",
"uuid": "346dec94-124c-4932-bd40-af9dc68f1d27",
"items": [
{
"uuid": "bf0a9ab9-99cc-4833-b3d3-84a97072e85f",
"title": "2.1",
"type": "question",
}
],
},
{
"type": "section",
"title": "3",
"uuid": "4964096d-0de9-4ab1-ace5-e42516d6b866",
"items": [
{
"uuid": "b2170580-1e2e-4fb4-a7b9-a56b79db21b3",
"title": "3.1",
"type": "question",
}
],
}
],
"params": {
"collapsed": false
}
}
到目前为止,我有以下算法来遍历深度数组:
export const findQuestions = (items, item = undefined, questions = []) => {
const _questions = [...questions];
if (
item !== undefined
&& !Object.prototype.hasOwnProperty.call(item, 'items')
) {
return _questions;
}
for (const _item of items) {
if (_item.type === 'question') {
_questions.push(_item);
}
if (Object.prototype.hasOwnProperty.call(_item, 'items')) {
return findQuestions(_item.items, _item, _questions);
}
}
return _questions;
};
我通过传递上面引用的对象来调用findQuestions:
const questions = findQuestions([this.lastPage]);
不幸的是,算法在2.1 处停止,并且没有横向到3.1。我的目标是拥有一个包含所有 questions 的数组:
[
{
"title": "1",
},
{
"title": "2.1",
},
{
"title": "3.1",
}
]
我假设问题出在
if (
item !== undefined
&& !Object.prototype.hasOwnProperty.call(item, 'items')
) {
return _questions;
}
它比它应该更快地返回。如何获取所有questions?
【问题讨论】:
标签: javascript arrays recursion