首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态访问/创建嵌套对象(根据循环中的数字进行深度分析)

如何动态访问/创建嵌套对象(根据循环中的数字进行深度分析)
EN

Stack Overflow用户
提问于 2018-07-12 20:48:02
回答 1查看 46关注 0票数 1

我有几个if-语句,它们几乎完全相同,只是currentHierarchie对象上的一个层次结构。有人能帮我把这个循环起来吗?这种方式的if语句的数量必须与laneAndAllParentLanesIds.length相同。

代码语言:javascript
复制
private createLaneHierarchieStructure(laneAndAllParentLanesIds: any[], currentHierarchie) {
    for (let i = 0; i < laneAndAllParentLanesIds.length; i++) {
        const obj = currentHierarchie;
        const keys = laneAndAllParentLanesIds;

        if (i === 0 && !obj[keys[i]])
            obj[keys[i]] = {};

        if (i === 1 && !obj[keys[i - 1]][keys[i]])
            obj[keys[i - 1]][keys[i]] = {};

        if (i === 2 && !obj[keys[i - 2]][keys[i - 1]][keys[i]])
            obj[keys[i - 2]][keys[i - 1]][keys[i]] = {};

        if (i === 3 && !obj[keys[i - 3]][keys[i - 2]][keys[i - 1]][keys[i]])
            obj[keys[i - 3]][keys[i - 2]][keys[i - 1]][keys[i]] = {};

        if (i === 4 && !obj[keys[i - 4]][keys[i - 3]][keys[i - 2]][keys[i - 1]][keys[i]])
            obj[keys[i - 4]][keys[i - 3]][keys[i - 2]][keys[i - 1]][keys[i]] = {};
    }
    return currentHierarchie;
}

此代码的示例响应 (在多次调用它并将其保存到相同的对象(currentHierarchie)之后,如下所示:

代码语言:javascript
复制
for (let i = 0; i < boards.length; i++) {
    let laneHierarchie = {};
    boards[i]['info']['lanes'].forEach(lane => {
        const laneAndAllParentLanesIds = this.getAllParentLanes(i, lane);
        laneHierarchie = this.createLaneHierarchieStructure(laneAndAllParentLanesIds, laneHierarchie);
    });
    console.log(laneHierarchie);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 21:05:41

您可以将obj变量声明和初始化移到for循环之外,并且只使用一个值作为检查obj的键,并在必要时分配一个空数组。

然后将下一个循环的最后一个属性分配给obj

代码语言:javascript
复制
const obj = currentHierarchie;

for (let key of laneAndAllParentLanesIds) {
    obj[key] = obj[key] || {};
    obj = obj[key];
}

带有reduce的版本

代码语言:javascript
复制
void laneAndAllParentLanesIds.reduce((o, id) => o[id] = o[id] || {}, currentHierarchie);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51314203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档