Javascript 尝试创建多维数组时未定义的值
我正在尝试创建一个多维数组 我假设以下结构Javascript 尝试创建多维数组时未定义的值,javascript,Javascript,我正在尝试创建一个多维数组 我假设以下结构stuff['mykey1']['mykey2']['mykey3']可以解释为stuff是一个二维数组。而stuff['mykey1']将返回一个带有以下键的二维数组['mykey2']['mykey3'] 我尝试这样创建此结构: var stuff = null; if(stuff === null) { stuff = []; // stuff is [] } if(stuff[userId] === undefined) {
stuff['mykey1']['mykey2']['mykey3']
可以解释为stuff
是一个二维数组。而stuff['mykey1']
将返回一个带有以下键的二维数组['mykey2']['mykey3']
我尝试这样创建此结构:
var stuff = null;
if(stuff === null)
{
stuff = []; // stuff is []
}
if(stuff[userId] === undefined)
{
stuff[userId] = []; // stuff is [undefined, undefined, undefined, 888087 more...]
}
if(stuff[userId][objectId] === undefined)
{
stuff[userId][objectId] = [];
}
然而,当我一步一步看stuff数组时,我看到在stuff[userId]=[]
之后;stuff数组是[未定义,未定义,未定义,888087更多…]
我在等[888087,[]
未定义的值来自哪里
未定义的值来自哪里
您使用的是数组,而不是对象。如果在数组对象上添加数值属性,它的长度
将被更新,其他索引保持单位化(),但显示为未定义
(请参阅)
相反,使用普通对象,其中数值特性没有特殊行为:
var stuff = null;
if(stuff === null)
{
stuff = {}; // stuff is an empty object
}
if(stuff[userId] === undefined)
{
stuff[userId] = {}; // stuff is now enriched with one property
}
if(stuff[userId][objectId] === undefined)
{
stuff[userId][objectId] = {}; // or maybe you really want an array here?
}
未定义的值来自哪里
您使用的是数组,而不是对象。如果在数组对象上添加数值属性,它的长度
将被更新,其他索引保持单位化(),但显示为未定义
(请参阅)
相反,使用普通对象,其中数值特性没有特殊行为:
var stuff = null;
if(stuff === null)
{
stuff = {}; // stuff is an empty object
}
if(stuff[userId] === undefined)
{
stuff[userId] = {}; // stuff is now enriched with one property
}
if(stuff[userId][objectId] === undefined)
{
stuff[userId][objectId] = {}; // or maybe you really want an array here?
}
这是因为使用了数组。剩余元素的长度未定义。
例如,如果指定了(1),则由于使用了数组,(0)将未定义。剩余元素的长度未定义。
例如,如果指定了一个(1),那么一个(0)将是未定义的您正试图创建的关联数组,在JavaScript中,这是通过。。。对象,而不是数组 因此,在每个步骤中,您都需要使用{}而不是[]来创建下一个级别。您需要使用for…in循环来迭代键 有关详细信息,请在Web上搜索JavaScript关联数组”。例如:
您正在尝试创建关联数组,在JavaScript中,这是通过…对象而不是数组完成的 因此,在每一步中,您都需要使用{}而不是[]来创建下一个级别,并且需要使用for…in循环来迭代键 有关更多详细信息,请在Web上搜索“JavaScript关联数组”。例如:
这个问题的答案很长,但我想插手一下这个速记,这确实使它更简洁易读:
stuff = stuff || {};
// if stuff is already defined, just leave it be. If not (||), define it as object
stuff[userId] = stuff[userId] || {};
// if stuff[userId] is already defined, define it as self (let it be unchanged). If not defined ( the || -signs ), define it as object.
stuff[userId][objectId] = stuff[userId][objectId] || {};
// and so on :)
这个问题的答案很长,但我想用这个速记,这真的让它更简洁易读:
stuff = stuff || {};
// if stuff is already defined, just leave it be. If not (||), define it as object
stuff[userId] = stuff[userId] || {};
// if stuff[userId] is already defined, define it as self (let it be unchanged). If not defined ( the || -signs ), define it as object.
stuff[userId][objectId] = stuff[userId][objectId] || {};
// and so on :)
你可能在某处做
数组(888087)
吗?当你做stuff[888087]=[]
时,你是说stuff
是一个长度至少为888088的数组。你确定这就是你想要的吗?你不想要对象而不是数组吗?@bfavaretto:是的,我忘了数组的自动大小。你可能在某处做Array(888087)
吗?当你做stuff[888087]=[]
时,你说stuff
是一个长度至少为888088的数组。你确定这就是你想要的吗?你不想要对象而不是数组吗?@bfavaretto:是的,我忘了自动调整数组大小。