【问题标题】:Accessing an index of an array which is passed as a variable and increment the index value访问作为变量传递的数组的索引并增加索引值
【发布时间】:2019-03-26 23:11:33
【问题描述】:

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

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

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

    【讨论】:

    • 您好 Jerney,感谢您的回复。有没有一种方法可以在设置变量 sn-p 中完成,我想使用这样的东西: vars.a[vars.index] 我想将索引初始化为 0 并相应地递增它
    【解决方案2】:

    我可以通过使用值 #[0] 初始化变量来实现这一点,并像 #[vars.variable + 1] 那样递增它

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 2013-01-27
      • 2019-06-09
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多