在javascript中迭代Map对象时,有没有办法访问索引值?

时间:2018-09-06 15:56:56

标签: javascript reactjs

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

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

问题是,我还有一个名为 resultsKey 的数组,该数组具有要用作每个列表项的{keys}的字符串。因此,可以说我的Map对象和我的strings数组如下:

Context mContext;
ArrayList<String> nameList;
ArrayList<String> scoreList;

public ScoreRecViewAdapter (Context context, ArrayList<String> nameList, ArrayList<String> scoreList) {
    this.mContext = context;
    this.nameList = nameList;
    this.scoreList = scoreList;
}


@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.rec_menu,parent, false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.nameView.setText(nameList.get(position));
    holder.scoreView.setText(scoreList.get(position));
}

@Override
public int getItemCount() {
    return nameList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView nameView;
    TextView scoreView;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        nameView = itemView.findViewById(R.id.textViewName);
        scoreView = itemView.findViewById(R.id.textViewScore);
    }
}
}

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

  • 最终结果:您赢了!

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

我知道,如果我有一个Object对象(将其命名为 objectResults )而不是Map对象,则可以通过在Object上调用Object.keys(),然后调用.map来实现此目的()或forEach()放在结果数组上(我们称其为 objectResultsKeys ),如下所示:

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

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

这里的事情是,如果遇到这种情况,我将能够使用.map()函数提供的 index 参数来访问resultsKey字符串数组并获取我想要的值。但是,对于iterating over Map objects而言,却没有这样的事情。

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

1 个答案:

答案 0 :(得分:1)

您可以直接去柜台

(\d)(\D*)(?=(\d))

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

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

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