

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# ItemSelector（Map）
<a name="input-output-itemselector"></a>

**管理状态和转换数据**  
了解如何[使用变量在状态之间传递数据](workflow-variables.md)和[使用 JSONata 转换数据](transforming-data.md)。

默认情况下，`Map` 状态的有效输入是原始状态输入中的一组单个数据项。使用 `ItemSelector` 字段，可在数据项的值传递到 `Map` 状态之前对其进行覆盖。

要覆盖这些值，请指定包含键值对集合的有效 JSON 输入。这些键值对可以是状态机定义中提供的静态值，使用[路径](amazon-states-language-paths.md)从状态输入中选择的值，或者从[上下文对象](input-output-contextobject.md)访问的值。

如果您使用路径或上下文对象指定键值对，则键名必须以 `.$` 结尾。

**注意**  
`ItemSelector` 字段取代了 `Map` 状态内的 `Parameters` 字段。如果您在 `Map` 状态定义中使用 `Parameters` 字段来创建自定义输入，建议您将其替换为 `ItemSelector`。

您可以在*内联 Map 状态*和*分布式 Map 状态*中指定 `ItemSelector` 字段。

例如，考虑以下 JSON 输入，其中包含 `imageData` 节点内三个项目的数组。对于每次 *`Map` 状态迭代*，都会将一个数组项作为输入传递给迭代。

```
[
  {
    "resize": "true",
    "format": "jpg"
  },
  {
    "resize": "false",
    "format": "png"
  },
  {
    "resize": "true",
    "format": "jpg"
  }
]
```

使用 `ItemSelector` 字段，您可以定义一个自定义 JSON 输入以覆盖原始输入，如以下示例所示。然后，Step Functions 将此自定义输入传递给每次 *`Map` 状态迭代*。自定义输入包含 `size` 的静态值和 `Map` 状态的上下文对象数据的值。`$$.Map.Item.Value` 上下文对象包含每个单独数据项的值。

```
{
  "ItemSelector": {
    "size": 10,
    "value.$": "$$.Map.Item.Value"
  }
}
```

以下示例显示了*内联 Map 状态* 的一次迭代所接收的输入：

```
{
  "size": 10,
  "value": {
    "resize": "true",
    "format": "jpg"
  }
}
```

**提示**  
有关使用 `ItemSelector` 字段的*分布式 Map 状态* 的完整示例，请参阅[使用分布式 Map 复制大规模 CSV](tutorial-map-distributed.md)。