vRealize Orchestrator中JavaScript多维数组填充及访问问题
解决vRealize Orchestrator中数组元素被合并为字符串的问题
我一眼就看出问题出在你处理数组的方式上——你把每个工作流的三个变量拆成了独立的数组项,而不是把它们打包成单个子数组存入主数组。这就导致主数组里的每个元素都是单独的字符串,而非包含三个变量的数组,所以访问arry[0][0]时会取到字符串的第一个字符,而不是你想要的第一个变量值。
原代码的核心问题
- 初始化错误:
outTable = ([testName],[testScore],[testNotes]);这种写法会把三个独立的单元素数组合并成一个一维数组,比如如果testName="john",结果会是["john", "85", "Good"],而不是你需要的二维数组[["john", "85", "Good"]]。 - 追加错误:
outTable.push([testName],[testScore],[testNotes]);这里一次性push了三个独立的单元素数组,相当于把三个字符串直接追加到主数组末尾,而不是追加一个包含三个变量的子数组。
修正后的代码
if (inTable == null) { // 初始化二维主数组,每个元素是包含当前工作流三个变量的子数组 outTable = [[testName, testScore, testNotes]]; } else { // 复制原数组(避免直接修改原引用,适配vRO的变量传递机制) outTable = [...inTable]; // 追加新的子数组,将当前工作流的三个变量打包后存入 outTable.push([testName, testScore, testNotes]); }
修正说明
- 用
[[...]]创建二维数组,确保主数组的每个元素都是一个包含三个变量的子数组,这样后续访问outTable[0][0]就能拿到第一个工作流的testName值(比如"john")。 - 追加时只push一个子数组
[testName, testScore, testNotes],而不是三个独立的数组,保证主数组的结构始终是二维的。 - 使用扩展运算符
[...inTable]复制原数组是为了避免意外修改原始的inTable引用,如果vRO中inTable是按值传递的,也可以直接用outTable = inTable后执行push,但扩展运算符的方式更安全。
验证效果
假设第一个工作流执行后,outTable的结构是:
[["john", "90", "Excellent"]]
第二个工作流执行后,结构会变成:
[["john", "90", "Excellent"], ["mary", "85", "Good"]]
此时outTable[0][0]就是"john",outTable[1][1]是"85",完全符合你的需求,而且后续添加新工作流时,只需要保持这个逻辑就能自动扩展数组。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

