在javascript中初始化'多维'对象

问题描述:

我在尝试在定义所有维之前用JavaScript填充多维对象时出现问题。在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' 

我之所以需要没有迭代启动的做法是因为我不知道将会有多少维度以及它将具有哪些密钥。它需要是动态的。

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

+1

那些不是阵列。 – SLaks

+0

抱歉 - 对象。原则依然。 – Austin

+0

我不明白你想要做什么。这个是来做什么的?你将如何填补它?你能举一个填充物体的例子吗? –

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

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 = {}; 
setPropertySafe(multiVar, 'levelone', 'leveltwo', 'levelthree', 'test'); 
/* 
multiVar = { 
    levelone: { 
     leveltwo: { 
      levelthree: "test" 
     } 
    } 
} 
*/ 
+1

请注意,您的'isObject'函数将为'isObject(null)'返回'true',如果您传递一个*函数对象*,它将返回'false',这两种情况都会给您带来问题。 – CMS

+0

它现在有效。它可能可以使用递归更优雅地完成,但是我会把它作为“练习给读者”。 '';-) –