我有一张地图,其中的键是strings
,值是Array
。
let map = new Map();
map.set("a", []);
map.set("a", map.get("a").push(1)); // array is changed to 1
我不明白为什么该值未附加到数组中。
答案 0 :(得分:1)
基于文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push
push()方法将一个或多个元素添加到数组的末尾,然后 返回数组的新长度。
这就是为什么您得到1
的原因,因为您只有一个元素。由于数组可以通过引用进行修改,因此您可以按以下方式进行操作:
let map = new Map();
map.set("a", []);
map.get("a").push(5);
console.log(map.get('a'))
您可以考虑的另一种选择是使用不可变方法,以使原始数组不会被ES6扩展语法或concat
map.set("a", [...map.get("a"), 1]);
console.log(map.get('a'));
map.set("a", map.get("a").concat(10));
console.log(map.get('a'));
答案 1 :(得分:0)
<footer class="navbar navbar-fixed-bottom bg-info">
content...
</footer>
返回数组的新长度,而不是数组,因此这就是您存储在Map中的长度。
当您压入阵列时,不需要使用push()
。 map.set()
在适当的位置更新数组,因此它修改了存储在push()
中的数组。只需写:
map
答案 2 :(得分:0)
替换最后一行,使您的代码变为:
let map = new Map();
map.set("a", []);
map.get("a").push(1); // this will push the value 1 to the array in the map.
函数Array.prototype.push返回推送后的数组长度。因此,您将得到1,它是数组的长度。
您的指令将值压入您想要的数组,然后返回1,您将其设置为地图,而这是您不希望的。因此,只需推动它,而不将其设置在地图上即可。