【发布时间】:2019-03-26 23:11:33
【问题描述】:
我有一个 arrayList value1,value2,value3,value4 等。我想将值作为变量访问,即 vars.value[将索引作为变量传递]。我想在访问第一个索引后增加值
【问题讨论】:
我有一个 arrayList value1,value2,value3,value4 等。我想将值作为变量访问,即 vars.value[将索引作为变量传递]。我想在访问第一个索引后增加值
【问题讨论】:
这里的棘手部分是,在您使用 DataWeave 创建数据后,它变成只读的。因此,即使索引是 var,也可以通过索引轻松访问数组中的元素:
var ss = ["hello", "world"]
var n = 1
---
ss[n]
// Output: "World"
你不能这样修改它:
ss[n] = "new value"
您可以通过以下两种方式之一来做您想做的事。如果你不关心数组的顺序,你可以删除一个元素(它返回一个没有你删除元素的新数组),并在末尾添加一个新元素(再次返回一个新数组)
var ss = ["hello", "world"]
var n = 0
---
(ss - n) + "space"
// Output: ["world", "space"]
如果您确实关心订单,我认为您最好的选择是map。但是你必须检查索引是否与每次迭代的 var 匹配,并且你需要通过输入数组完成整个迭代:
var ss = ["hello", "world"]
var n = 0
---
["hello", "world"] map (s, idx) ->
if (idx == n) "goodbye" else s
// Output: ["goodbye", "world"]
这里有一个更具体的例子来说明你想要实现的目标,使用数字而不是字符串:
var ns = [1,2,3,4,5]
var indexToIncrement = 0
---
ns map (n, idx) ->
if (idx == indexToIncrement) n + 1 else n
// Output: [2,2,3,4,5]
【讨论】:
我可以通过使用值 #[0] 初始化变量来实现这一点,并像 #[vars.variable + 1] 那样递增它
【讨论】: