访问作为变量传递的数组的索引并增加索引值

时间:2019-03-25 21:10:54

标签: mule dataweave

我有一个arrayList value1,value2,value3,value4等。我想将值作为变量访问,即vars.value [将索引作为变量传递]。访问第一个索引后,我想增加值

2 个答案:

答案 0 :(得分:0)

这里最棘手的部分是,使用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]

答案 1 :(得分:0)

我能够通过使用值[[0]初始化变量并将其递增来实现此目的,就像#[vars.variable + 1]