Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化一个';多维';javascript中的对象_Javascript_Object_Dynamic_Initialization_Multidimensional Array - Fatal编程技术网

初始化一个';多维';javascript中的对象

初始化一个';多维';javascript中的对象,javascript,object,dynamic,initialization,multidimensional-array,Javascript,Object,Dynamic,Initialization,Multidimensional Array,在定义所有维度之前,我在尝试用javascript填充多维对象时遇到了一个问题 例如,这就是我想要做的: var multiVar = {}; var levelone = 'one'; var leveltwo = 'two'; multiVar[levelone][leveltwo]['levelthree'] = 'test' 要创建每个尺寸标注,必须使用以下线条,这将非常麻烦: var multiVar = {}; multiVar['levelone'] = {}; multiV

在定义所有维度之前,我在尝试用javascript填充多维对象时遇到了一个问题

例如,这就是我想要做的:

var multiVar = {};
var levelone = 'one';
var leveltwo = 'two';

multiVar[levelone][leveltwo]['levelthree'] = 'test'
要创建每个尺寸标注,必须使用以下线条,这将非常麻烦:

var multiVar = {};

multiVar['levelone'] = {};
multiVar['levelone']['leveltwo'] = {};
multiVar['levelone']['leveltwo']['levelthree'] = 'test'
function setPropertySafe(obj)
{
    function isObject(o)
    {
        if (o === null) return false;
        var type = typeof o;
        return type === 'object' || type === 'function';
    }

    if (!isObject(obj)) return;

    var prop;
    for (var i=1; i < arguments.length-1; i++)
    {
        prop = arguments[i];
        if (!isObject(obj[prop])) obj[prop] = {};
        if (i < arguments.length-2) obj = obj[prop];
    }

    obj[prop] = arguments[i];
}
我之所以需要在没有迭代启动的情况下执行它,是因为我不知道会有多少维度,也不知道它会有什么键。它需要是动态的


有没有一种方法可以以动态的方式做到这一点?

您可以编写一个函数来确保必要的“尺寸”的存在,但是您将无法使用点或括号符号来获得这种安全性。大概是这样的:

var multiVar = {};

multiVar['levelone'] = {};
multiVar['levelone']['leveltwo'] = {};
multiVar['levelone']['leveltwo']['levelthree'] = 'test'
function setPropertySafe(obj)
{
    function isObject(o)
    {
        if (o === null) return false;
        var type = typeof o;
        return type === 'object' || type === 'function';
    }

    if (!isObject(obj)) return;

    var prop;
    for (var i=1; i < arguments.length-1; i++)
    {
        prop = arguments[i];
        if (!isObject(obj[prop])) obj[prop] = {};
        if (i < arguments.length-2) obj = obj[prop];
    }

    obj[prop] = arguments[i];
}

对不起,是物体。原则依然存在,我不明白你想做什么。这是干什么用的?你怎么填?你能给出一个填充对象的例子吗?我正在使用它从服务器返回用于Yahoo Fantasy足球联赛数据的JSON数据…你到底想用这个JSON做什么?请注意,你的
isObject
函数将返回
true
for
isObject(null)
如果您传递函数对象,它将返回
false
,这两种情况都会给您带来问题。它现在可以工作了。使用递归可能可以更优雅地完成,但我将把它作为“读者的练习”。
;-)