我正在研究涉及多维数组的CodeWars kata。 我有一个包含三个元素的数组。每个元素都是一个带有名称(字符串)和总和(数字)的数组。 我正在检查数字。如果它们超过一定数量,我想删除具有该数字的子数组并将其放在数组的末尾。我使用了splice()和push()。
在具有必须移动的子数组的测试用例中,子数组被推送到父数组的末尾。但是,它有一组额外的括号。我想知道为什么会这样。当推送发生时,JavaScript会自动添加括号,因为父数组只有子数组作为元素吗?
以下链接指向Chrome Dev Tools的一些截图和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);
答案 0 :(得分:1)
使用Array.concat
而不是push to concat数组
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat