JavaScript中使用Object.keys遍历Map无效问题求助
解决Map无法用Object.keys获取键并生成自定义数组的问题
你用Object.keys()获取Map实例的键是错误操作——Map是ES6专属的集合类型,不是普通JavaScript对象。Object.keys()只能遍历普通对象的自有可枚举属性,而Map的键值对存储在内部独立结构中,根本不会被Object.keys()识别,所以才返回空数组。另外你用map1[key]取值也是错的,Map必须通过map1.get(key)方法获取对应值。
下面是几种正确实现你需求的方式:
方法一:用Map的entries()方法(最直接高效)
Map的entries()方法会返回包含所有键值对的迭代器,转成数组后可直接映射成目标结构:
let map1 = new Map(); map1.set('111020022AS', true); map1.set('23t2t363114', false); map1.set('110AI1123333', true); map1.set('0000111222', false); // 直接解构键值对,生成目标数组 const newArray = Array.from(map1.entries()).map(([key, value]) => ({ label: key, value: value })); console.log('new array is', newArray);
方法二:用keys()方法配合get()取值
如果想先获取所有键再单独取值,可以用Map自带的keys()方法:
const newArray = Array.from(map1.keys()).map(key => ({ label: key, value: map1.get(key) }));
方法三:用展开运算符简化代码
展开运算符可以直接把Map的键值对转成二维数组,再进行映射:
const newArray = [...map1].map(([key, value]) => ({ label: key, value: value }));
以上三种方法都会输出你需要的结构:每个元素都是{label: 键字符串, value: 对应布尔值}的对象数组。
内容的提问来源于stack exchange,提问作者Amax1
相关产品推荐
相关产品推荐

