使用Cordova,我试图将一个Object添加到一个数组中。我使用以下方法在节点JS上工作:
theData = {[varkey]:DataObject};
但是我无法在我的运行中的javascript中以相同的方式工作。
我需要做以下事情:
var TownName = 'Auckland', var townData = (JSON Data);
theArray = new Array();
theArray[TownName] = townData;
我需要能够将其称为:
theArray['Auckland']
将返回(JSON数据)
但它并不想将数据存储在数组中。
我也尝试过:
theArray.TownName = townData;
theArray = [{TownName:townData}];
theArray = {[TownName]:townData}];
没有什么想存储数据。
有什么建议吗?
:: EDIT ::
data.theData =
"Auckland"[
{
"username":"pndemoname1",
"number":"373456",
"www":"http://373456.pndemoname1",
"icon":"/imgs/pndemoname1.png"
},
{
"username":"pndemoname2",
"number":"373458",
"www":"http://373458.pndemoname2",
"icon":"/imgs/pndemoname2.png"
}
data.town = "Auckland";
townData = new Array();
alert(JSON.stringify(data.theData))//Alerts theData
townData[data.town] = data.theData
alert(townData[townName]) //Alerts undefined
:: EDIT2 ::
在处理所有数据的函数中重新定义数组,似乎可以使它工作。
根据我的回答,问题在于我认为javascript vars是全球性的。
答案 0 :(得分:0)
使用对象或对象数组。
这样的数据结构:
{
town1: town1Data,
town2: town2Data,
}
或更常见:
[
{
name: "Town 1",
data: {...}
},
{
name: "Town 2",
data: {...}
},
]
供参考:
http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/
答案 1 :(得分:0)
我得到了你想要做的事情,首先通过确保你使用OBJECT而不是数组来动态地向你的对象添加属性名称,所以当你想要存储的东西时你会做以下内容:
var _obj = {}, _something = 'xyz';
_obj[ _something ] = { ... }; // json structure
您遇到的问题是您希望将字符串值指定为数组中的键,这将无效。
但是,您仍然可以使用您定义的阵列并执行以下操作:
var _array = new array();
_array.push( { .... } ); // insert json structure
记住!通过使用数组,每次要访问密钥时都必须遍历所有值,这是避免出错的最佳做法。
祝你好运。答案 2 :(得分:0)
问题是我没有在我尝试添加信息的功能中定义数组。
我认为var是全局的(太多PHP)