我刚刚开始在 JavaScript 中使用关联数组。我知道它们并不是真正的数组,但它们似乎满足了我的目的,即将记录中的一些配置数据加载到一些 session 范围变量中,以便我可以非常轻松地访问它们。
现在我有一个数据结构,每个键可以有多个值。我在加载此内容时遇到问题。
下面是一些伪代码。它通过一个循环运行,加载一个关联数组,这样我将得到以下内容:
key="App1"value="App1Title1,App1Title2,etc" key="App2"value="App2Title1、App2Title2 等"
最好的方法是什么?
var tmpDes = {};
//Loop through data records
//Load the values below from loop, not hardcoded like here.
var keyStr:String = "key";
var valStr1:String = "value1";
var valStr2:String = "value2";
//This seems to work
tmpDes[tmpStr] = "xpApp1Title1";
tmpDes[tmpStr] = tmpDes[tmpStr] + "," + tmpStr1;
//
================================================== ========= 这些都是极好的答案。通过搜索,我确实意识到这些并不是真正的关联数组,而是对象,我应该提到这一点。
Dan,问题是我正在循环浏览文档表,所以在构造 js 对象时我不知道 valStr1 和 valStr2。我本质上想要的是使用“push”,但这些并不是真正的数组,所以这是行不通的。
================================================== ====
这更接近,但问题是我不知道来自文档的值,并且我不明白如何使数组名称来自变量。
文件中的文档包含这些字段
关键值 应用1 应用1标题1 应用1 应用1标题2 应用2 应用2标题1 应用2 应用2标题2 等等
我需要创建一个结构,以便如果我调用 App1,我可以获得一个列表 ==> "App1Title1":"App1Title2"
因此,我创建了对象和临时字符串变量,然后开始阅读文档。
从第一个文档加载临时变量。
然后我想设置obj。但我想动态地做到这一点。
所以这条线
obj.tmpKey.push(tmpVal)
应该执行
obj.App1.push(AppTitle1).
但显然我是如何编写它的,它无法使用 tmpVal 加载 tmpKey
也许我使用了错误的结构?我愿意改变它。
var obj = {};
var tmpKey:String;
var tmpVal:String
//Loop docs, getting values.
tmpKey = doc.getItemValueString("var1");
tmpVal = doc.getItemValueString("var2");
obj.tmpKey.push(tmpVal);
//Loop
最佳答案
这不是关联数组。在 Javascript 中,我们将其称为 Object
,这是不同的东西,尽管您通常可以像其他语言所称的关联数组、哈希或字典一样使用它们。
对象
具有属性(类似于键)。您可以将数组(和其他类型)存储为 Object
属性的值。
var obj = {};
obj.aThing = [];
obj.anotherThing = [];
obj.aThing.push("foo");
obj.aThing.push("bar");
obj.anotherThing.push("a");
obj.anotherThing.push("b");
obj.anotherThing.push("c");
console.log("aThing", obj.aThing);
console.log("anotherThing", obj.anotherThing);
将产生输出:
aThing [ "foo", "bar" ]
anotherThing [ "a", "b", "c" ]
您提到您需要使属性名称来自变量,Javascript 也允许这样做。您需要改用objectName[varName]
,如本例所示。
var obj = {};
var name1 = "aThing";
var name2 = "anotherThing";
obj[name1] = [];
obj[name2] = [];
obj[name1].push("foo");
obj[name1].push("bar");
obj[name2].push("a");
obj[name2].push("b");
obj[name2].push("c");
console.log(name1, obj[name1]);
console.log(name2, obj[name2]);
这是相同的代码,只是使用变量作为对象键。
最后,您可以直接使用字符串作为属性名称。
var obj = {};
obj["aThing"] = [];
obj["anotherThing"] = [];
obj["aThing"].push("foo");
obj["aThing"].push("bar");
obj["anotherThing"].push("a");
obj["anotherThing"].push("b");
obj["anotherThing"].push("c");
console.log("aThing", obj["aThing"]);
console.log("anotherThing", obj["anotherThing"]);
关于javascript - 具有多个值的代码关联 javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31462065/