javascript - 嵌套短路对象的快速方法?

标签 javascript

例如,我希望在嵌套对象链的末尾创建一个对象,例如:

window.a.b.c.d = {}

但我需要检查参数 a、b 和 c 是否存在,否则创建它们。 据我所知,你需要这样做:

window.a = window.a || {};
window.a.b = window.a.b || {};
window.a.b.c = window.a.b.c || {};
window.a.b.c.d = {};

是否有更快/更好(“单行”)的方法?

最佳答案

您可以按如下方式编写对象:

window.a = {
    b: {
        c: {
            d: {
            }
        }
    }
};

但是当您想在现有对象上执行此操作时,最好编写一个函数。

示例:

/**
 * Create object(s) in a object.
 * 
 * @param object obj
 * @param array  path
 */
function createObjectPath(obj, path) {

    var currentPath = obj;

    // Iterate objects in path
    for(var i = 0, p; p = path[i]; i++) {

        // Check if doesn't exist the object in current path
        if(typeof currentPath[p] !== 'object') {

            currentPath[p] = {};
        }

        currentPath = currentPath[p];
    }
}

你可以这样使用这个函数:

createObjectPath(window, ['a', 'b', 'c', 'd']);

该函数在第一个参数中创建参数对象的引用,然后迭代第二个参数中参数数组中的每个字符串,并将每个字符串设置为父对象中不存在的对象情况。

关于javascript - 嵌套短路对象的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37971706/

相关文章:

javascript - 无法将此 Format Date 转换为另一个 Javascript Moment.js

javascript - 如何在单击时激活的 wordpress 页面的标题中包含 js 文件

javascript - 为什么 'o'是真的? JavaScript( Angular )

javascript - 拖放到 HTML5 Canvas

javascript - 使用 javascript 将 2 个数组打印到 CSV 文件中

javascript - AngularJS - 双大括号导致语法错误

javascript - node.js 需要虚拟机脚本中的模块

javascript - AngularJS/CSS 选择器 - 表单验证

javascript - Bootstrap Carousel 不换图不滑动

javascript - 正则表达式匹配货币或百分比