如何在JavaScript中实现C++ std::map存储std::vector数组的功能
问题原因与解决方案
错误点
Array.push()方法的返回值是数组新的长度,不是数组本身。你直接将push的返回值存入Map,导致Map中存储的都是数值类型的长度,不是你预期的数组,后续调用属性自然无法得到正确结果。- 你所有键共用了同一个全局
array_history数组,最终所有键都会指向同一个数组,不同键的数据会完全混淆,不符合C++中std::map每个key对应独立std::vector的效果。 - 取值逻辑顺序错误:你存入数组的元素是带
h_col1属性的对象,正确取值逻辑是先取数组的第0个元素,再取它的h_col1属性,你的代码写反了顺序。 - 变量名不匹配:你定义的Map变量名为
my_map,取值时写的是xer_map,会直接报错找不到变量。
修正代码
存值逻辑
var my_map = new Map(); // 以下代码位于for循环内 const key = data_blob[row].s_col1; // 键不存在时先初始化对应空数组 if (!my_map.has(key)) { my_map.set(key, []); } // 取出对应数组,执行push操作 my_map.get(key).push({ h_col1: data_blob[row].s_col2 });
取值逻辑
// 先判断键存在、数组不为空,避免运行报错 if (my_map.has("GG1000") && my_map.get("GG1000").length > 0) { document.writeln(my_map.get("GG1000")[0].h_col1); }
内容的提问来源于stack exchange,提问作者jparanich
相关产品推荐
相关产品推荐

