为什么在我尝试推送时将数组更改为“ 1”?

时间:2018-08-14 02:16:39

标签: javascript

我有一张地图,其中的键是strings,值是Array

let map = new Map();

map.set("a", []);

map.set("a", map.get("a").push(1)); // array is changed to 1

我不明白为什么该值未附加到数组中。

3 个答案:

答案 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,您将其设置为地图,而这是您不希望的。因此,只需推动它,而不将其设置在地图上即可。