如何向Map中作为值存储的数组添加元素?
解决Map中数组添加元素的问题
你的代码问题所在
你写的myMap.set(name,myMap.get(name).push(item))之所以不对,是因为Array.push()方法返回的是数组更新后的长度数字,不是更新后的数组。执行这段代码后,对应键的值会被改成数字,而不是你想要的添加了新元素的数组。
正确实现方式
情况1:确定键已经存在于Map中
因为数组是引用类型,Map里存储的是数组的引用,直接修改原数组就会同步到Map里,不需要调用set:
const targetArr = myMap.get(name); targetArr.push(item);
情况2:不确定键是否存在(健壮性写法)
如果键可能不存在,先判断并初始化空数组,再添加元素:
// 先获取数组,不存在则用空数组兜底 const targetArr = myMap.get(name) || []; targetArr.push(item); // 把更新后的数组存回Map myMap.set(name, targetArr);
也可以用更简洁的写法,利用concat或展开运算符返回新数组的特性:
// 用concat生成新数组 myMap.set(name, (myMap.get(name) || []).concat(item)); // 用展开运算符生成新数组 myMap.set(name, [...(myMap.get(name) || []), item]);
内容的提问来源于stack exchange,提问作者John V
相关产品推荐
相关产品推荐

