我正在尝试创建一个多维数组。
我假设以下结构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,[]]
未定义的值来自何处?
答案 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)