假设我的输入如下:
[
{ "name": "Archer" },
{ "name": "Cyril" },
{ "name": "Pam" }
]
我想得到输出为
[
{ "id": 1, "name": "Archer" },
{ "id": 2, "name": "Cyril" },
{ "id": 3, "name": "Pam" }
]
我们可以使用每个节点循环遍历所有对象来做到这一点,如果我有一个很长的脚本并且我需要对每个节点使用不同的脚本,该怎么办?在这种情况下,这是不可行的。 javascript中有没有像map这样的函数。
谢谢,
此类操作的最佳节点是
Quickmap
节点,但实现此目的的方法取决于您想要通过目标 json
主体中递增的 ID 实现的目标。
如果您想为
element
中的每个 array
从 1 开始数,那么您可以尝试以下操作。
您需要为源有效负载进行额外的嵌套,以便我们可以使用
INDEXOF()
函数来索引数组中的每个 element
,如下所示:
首先我要添加提到的嵌套。我将这篇文章中的原始正文传递到 Formatter 节点上的
Body
属性,并且 Formatter 的 Result
正在传递到 Quickmap 节点的 Source
中。
我从格式化程序节点复制了
Result
,然后向每个 id
添加了 element
字段,并将其粘贴到 Quickmap 节点中的 Target
负载中。 Quickmap 映射如下所示:
在上面您将看到我将第二个
container
从 Source
映射到我的 id
的 Target
字段,然后我使用 INDEXOF()
函数对 id
字段中的每个元素进行索引。我还在映射表达式中添加了“+1”,以便它可以从 1 开始。
从这里您可以使用带有一些
Script
的 C#
节点来摆脱我们需要的额外嵌套。
如果您需要 ID 来记住最后一个 ID 是什么,并且需要它从工作流程的最后一个实例停止的位置进行索引,我建议您使用 Flowgear
Key Values
来跟踪最后一个 ID。
在这个例子中,我使用了与上面相同的工作流程,并对其进行了修改以保存工作流程最后一次执行的最大ID。
现在,我的工作流程开始处有一个
Get Key Value
节点,末尾有一个 Set Key Value
节点。在这里,我需要创建一个 Group
来跟踪键值以及 Key
。 Group
来自 Variable Bar
,并且 Key
被硬编码在“获取和设置键值”节点上(在屏幕截图中以红色显示)。您可以决定这些应该来自哪里。
当此示例工作流程首次运行时,我们不会设置任何键值,因此这就是为什么我将
Missing
节点的 Get Key Value
属性连接到仅保存硬编码 0
的占位符格式化程序节点
用于将传递到 Quickmap 节点的第一次运行。运行一次后,它会将 ID 设置为我的 Quickmap 中的最大 ID 到键值存储中,以供将来运行时访问。
对于未来的运行,工作流程将进入
Found
属性,并且可以将其传递到要使用 GETVALUE()
访问的 Quickmap 属性中,以便我们可以与 Quickmap 节点外部的值进行交互。我打电话给我的LastId
。我还在 CurrentMaxId
负载中添加了一个 Result
字段,位于 Root
容器下方。
在 Quickmap 上完成此操作后,您可以将
CurrentMaxId
传递到 Value
节点上的 Set Key Values
,以便可以为下一次运行进行设置。