![](/img/trans.png)
[英]Javascript trouble when copying element from one array to another. Extra square brackets, extra dimensions?
[英]Why is JavaScript adding extra square brackets when I push a sub array into another array?
我正在研究涉及多维数组的CodeWars kata。 我有一个包含三个元素的数组。 每个元素都是一个具有名称(字符串)和总和(数字)的数组。 我正在检查数字。 如果它们超过一定数量,我想删除具有该数字的子数组并将其放在数组的末尾。 我使用了splice()和push()。
在具有必须移动的子数组的测试用例中,该子数组被推到父数组的末尾。 但是,它还有一组额外的括号。 我想知道为什么会这样。 由于父数组仅将子数组作为元素,因此在推送时JavaScript是否自动添加括号?
这里是一些Chrome开发工具屏幕截图的链接,以及CodeWars的屏幕截图的链接。 我将它们合并为一张图像。 弹出窗口中索引2处的子数组显示了在第一个屏幕快照中移动/推动的末尾的子数组。 第二张屏幕截图显示了展开的视图。 我要附加的最终屏幕截图是CodeWars中显示的结果,您可以在最后一个子数组上看到双括号。
我无法上传图片。 因此,这里是在线链接。 https://sta.sh/01tp7y7zaayi
这是发生这种情况的代码部分。 我包括了排序。 但是,我认为它不会影响任何事情。
注意:我有一个循环遍历这三个元素来检查它们在注释中的位置。 但是,我删除了它,因为不应循环遍历一个数组并对该数组进行更改。 我正在为此编写一个map()方法以返回一个新数组。 但是,我注意到出现了双括号。 因此,我没有完成map()部分。 我试图首先弄清楚在splice()/ push()部分中发生了什么。
var arrNew = [["Ben", sumBen], ["Amy", sumAmy], ["Sam", sumSam]];
arrNew.sort(function (a,b) {
if (a[1] < b[1]) return 1;
if (a[1] > b[1]) return -1;
if (a[0] > b[0]) return 1;
if (a[0] < b[0]) return -1;
return 0;
});
// If someone's score is over 21, move them to the back.
var forMoving = arrNew.splice(0, 1);
arrNew.push(forMoving);
使用Array.concat
而不是推送到concat数组。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.