尝试创建多维数组时未定义的值

时间:2012-12-18 18:25:34

标签: javascript

我正在尝试创建一个多维数组。

我假设以下结构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[userId] = []之后; stuff数组是[undefined, undefined, undefined, 888087 more...]

我期待[888087,[]]

未定义的值来自何处?

4 个答案:

答案 0 :(得分:4)

  

未定义的值来自何处?

您正在使用数组,而不是对象。如果在Array对象上添加数字属性,则length将更新,其他索引将保持单元化(sparse array),但显示为undefined(请参阅What is "undefined x 1" in JavaScript? )。

相反,请使用普通对象,其中数字属性没有特殊行为:

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)将是未定义的

答案 2 :(得分:0)

您正在尝试创建关联数组,而在JavaScript中,这是通过...对象完成的,而不是数组!

因此,在每个步骤中,您需要使用{}而不是[]来创建下一个级别。并且您需要使用for ... in循环来遍历键。

有关更多详细信息,请在Web上搜索JavaScript关联数组“。例如:

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

答案 3 :(得分:0)

这个问题已经得到了很好的回答,但是我想用这个速记来填充,这真的让它更紧凑和可读:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class java.lang.String. Tried:
    * retrofit.ExecutorCallAdapterFactory
            at retrofit.Utils.resolveCallAdapter(Utils.java:67)
            at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:49)