初始化一个';多维';javascript中的对象
在定义所有维度之前,我在尝试用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
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
forisObject(null)
如果您传递函数对象,它将返回false
,这两种情况都会给您带来问题。它现在可以工作了。使用递归可能可以更优雅地完成,但我将把它作为“读者的练习”。;-)代码>