【问题标题】:Is there a way to access to an index value while iterating over a Map object in javascript?有没有办法在 javascript 中遍历 Map 对象时访问索引值?
【发布时间】:2018-09-06 15:56:56
【问题描述】:

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

  • {key1}:{value1}
  • {key2}:{value2}

问题是我还有一个名为 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() 函数提供的 index 参数来访问 resultsKey 字符串数组并获得我想要的值.但是对于iterating over Map objects,则没有这样的事情。

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

【问题讨论】:

  • 虽然 Maps 有一定的顺序,但它们仍然是键/值对的无序集合。如果您需要某个订单,则 Map 是错误的选择。
  • 我不明白,Map 有一个forEach 方法。你为什么不用那个? 正在迭代Map
  • 什么是你不明白的?我可以尝试扩展。我可以使用 forEach,但是这将如何让我访问索引值以从我的字符串数组中获取所需的字符串?

标签: javascript reactjs


【解决方案1】:

你可以拿一个柜台:

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

或者你把条目变成一个数组:

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

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

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2016-03-31
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2016-06-18
    • 2017-12-28
    相关资源
    最近更新 更多