gpt4 book ai didi

javascript - 如何在 javascript 中获取对象的子对象的子对象。 (如果存在)

转载 作者:行者123 更新时间:2023-11-30 07:27:58 24 4
gpt4 key购买 nike

我得到了一些json数据,我有这样一个结构:

'modules' : {
'category1' : {
'section1' : {
'page1' : [ 'module1', 'module2' ]
},
'section2' : {
'page1' : [ 'module1' ]
}
},
// and so on
}

我需要获取某个页面的所有模块。

输入参数为categorysectionpage

所以我需要获取模块[类别][部分][页面]。

但是如果这样的部分或页面没有模块怎么办。

    // m = getAllModules();

if ( m.hasOwnProperty(category) ) {
if ( m[category].hasOwnProperty(section) ) {
if (m[category][section].hasOwnProperty(page)) {
concrete = m[category][section][page];
}
}
}

如何优化这个脚本?这是 m[] 的很多调用。有更好(更快)的方法吗?

最佳答案

你可以这样做:

var categories, sections;    
if ((categories = modules[categoryName]) && (sections = categories[sectionName])) {
concrete = sections[pageName] || [];
}
else {
concrete = [];
}

您还可以创建一个更通用的解决方案:

function traverse(source) {
var path = Array.prototype.slice.call(arguments, 1);
var current = source;
for (var i = 0, l = path.length; i < l; ++i) {
current = current[path[i]];
if (!current) break;
}
return current;
}

像这样使用它:

concrete = traverse(modules, categoryName, sectionName, pageName) || [];

关于javascript - 如何在 javascript 中获取对象的子对象的子对象。 (如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194076/

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