关于javascript:如何将新数组附加到多维数组的开头

How to append new array to beginning of multi-dimensional array

本问题已经有最佳答案,请猛点这里访问。

我有一个二维数组,叫做varr。看起来像是…

1
vArr = [[1, 1], [2, 2], [3, 3]];

我要做的是,当一个新数组需要附加到varr的开头时,移动所有数组元素,然后删除varr的最后一个元素以保留其大小(在本例中是3)。例如,如果一个新的元素[4,4]出现了,我想附加到varr,那么这个新的varr应该如下所示。

1
vArr = [[4, 4], [1, 1], [2, 2]];

[4,4]已附加到开头,所有其他元素都已移动,并且已删除超过varr大小3(即[3,3])的任何剩余元素。这是到目前为止我的代码…

1
2
3
4
5
6
7
8
9
10
11
12
var vArr = [[1, 1], [2, 3], [3, 3]];
var newv = [4, 4]; // New array to append

// My attempt at splicing newv to position 0 in vArr array without removing anything
vArr = vArr.splice(0, 0, newv);

// newv logs to the console successfully, however vArr is undefined for some reason
console.log(newv);
console.log(vArr);

// Get rid of final element (doesn't work because vArr is no longer defined from above)
vArr = vArr.pop();

我知道拼接行中的语法可能有问题,但我在网上找不到任何有关此处错误的信息。如果要将数组拼接为二维数组,拼接方法必须更改吗?或者它在这种情况下根本不起作用?非常感谢您的帮助!


您可以使用unshift()在原始数组的开始处推送新数组,使用pop()从数组中删除最后一个元素:

1
2
3
4
5
var vArr = [[1, 1], [2, 2], [3, 3]];
var arrToPush = [4, 4];
vArr.unshift(arrToPush);
vArr.pop();
console.log(vArr);


问题在于将EDOCX1的结果(0)分配回vArr

拼接函数还可以从数组中删除项,splice()的返回值是那些删除的项。

所以vArr = vArr.splice(0, 0, newv);应该只是vArr.splice(0, 0, newv);而已。


在这里,您可以使用解决方案https://jsfiddle.net/fkz9ubug/

1
2
3
4
5
var vArr = [[1, 1], [2, 3], [3, 3]];
var newv = [4, 4];
vArr.unshift(newv)

console.log(vArr);

文档

  • https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/array/unshift

  • https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/array/unshifthttps://www.w3schools.com/jsref/jsref_unshift.asp