1

在我的项目中,我必须将 Javascript 对象转换为名为mapResults的Map对象。经过一些转换(切掉前两个值)后,我现在想遍历这个集合以使用以下语法呈现一些列表项。

  • {键1}:{值1}
  • {键2}:{值2}

问题是我还有一个名为resultsKey的数组,其中包含我想用作每个列表项的 {keys} 的字符串。所以,假设我的 Map 对象和我的字符串数组如下所示:

mapResults = 
0: gameStatus -> "You Won!"
1: difficulty -> "Intermediate"
2: movesCount -> 13

resultsKey = [
"Final result",
"Level",
"Number of movements",
]

现在我想遍历这两个集合以获得所需的列表项输出:

  • 最终结果:你赢了!

列表项的每个键都取自我的 resultsKey 数组,每个值都取自我的 mapResults 对象。两个系列的长度/大小相同。

我知道如果我有一个 Object 对象(将其命名为objectResults)而不是 Map 对象,我可以通过在 Object 上调用 Object.keys() 来实现这一点,然后在结果数组上调用 .map() 或 forEach() (让我们称之为objectResultsKeys)像这样:

objectResultsKeys.map((key, index)=>{
    return <li>
        {resultsKey[index]}:{objectResults[key]}
        </li>
})

这里的问题是,如果我遇到这种情况,我将能够使用 .map() 函数提供的索引参数来访问 resultsKey 字符串数组并获得我想要的值。但是在迭代 Map 对象时没有这样的事情。

所以我想知道是否有任何解决方案可以为我提供索引值,我可以在迭代 Map 对象时使用它来访问我的字符串数组。或者,如果有任何其他解决方案可以实现与我所解释的结果类似的结果。我不得不为此解决方案使用 Map 对象。

4

1 回答 1

2

你可以拿一个柜台:

 let index = 0;
 for(const [key, value] of map.entries()) {
   // ...
   index++;
 }

或者您将条目转换为数组:

 [...map.entries()].forEach(([key, value], index) =>
   //...
 );

但实际上由于地图是按插入时间排序的,我不会依赖地图的顺序。

于 2018-09-06T16:02:03.263 回答