繁体   English   中英

为什么将子数组推入另一个数组时JavaScript为什么要添加额外的方括号?

[英]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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM