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

Javascript 快速嵌套短路对象的方法?,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 = {

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

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']);
该函数在第一个参数中创建一个已参数化对象的引用,然后迭代在第二个参数中已参数化的数组中的每个字符串,并将每个字符串设置为父对象中不存在对象大小写。

Lodash's在一行程序中完全做到这一点(忽略导入)


如果你写一个方法会更好。如果您想要一个快速而脏的单行程序,您可以尝试…捕获并查看是否存在引用错误。您可以通过
object.keys(obj).length查看对象当前有多少个键,您可以跳过编写
window。
从第二条语句开始:
window.a=window.a |{};a、 b=a.b |{};a、 b.c=a.b.c |{};a、 b.c.d={}。合并递归(窗口,{a:{b:{c:{d:{});但这并不是一个“更快”的解决方案。非常冗长。但是谢谢。没有方法,没有其他方法可以做到这一点。也许你想要一个来自
Array.prototype
的标准方法。如果没有其他方法,那么这就是我想要的答案:)
import { set } from 'lodash'

set(window, 'a.b.c.d', {})