javascript - 具有多个值的代码关联 javascript 数组

标签 javascript xpages xpages-ssjs

我刚刚开始在 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/

相关文章:

rest - 我可以使用 REST 服务来填充使用 SSJS 计算的 <selectItems> 控件吗?

java - 从绑定(bind)到托管 bean 的单选按钮组获取值

xpages - 需要通过 SSJS 在新数据库上设置 Launch 属性

javascript - 如何使用脚本执行自动单击jsf中的命令按钮

javascript - SVGElement 类型不存在属性 getBBox

lotus-domino - 如何将项目包装在 <xe :djextListTextBox> at a certain width 中

java - 抑制 Domino 控制台消息 "error connecting to server ... the remote server..."

复选框值的 JavaScript 警报

javascript - 如何在 Javascript 中编写嵌套事务查询?

java - 使用 arrayList 作为 XPages 中重复控件的源