如何连接 2 个切片数组?

How to concat 2 sliced array?

我有:

var a = [1,2,3,4,5,6,7,8,9]

我正在尝试做:

var b = [];
b.concat(a.slice(0,3), a.slice(-3))

结果我有:

b == []

如何从位于 b 的数组中获取前 3 个元素和后 3 个元素?

concat 不能内嵌在数组上。 concat()的结果必须抓到

The concat() method returns a new array comprised of the array on which it is called joined with the array(s) and/or value(s) provided as arguments.

您没有更新 b 数组的值。

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var b = [].concat(a.slice(0, 3), a.slice(-3));

document.write(b);
console.log(b);

您还可以 concat 切片数组。

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var b = a.slice(0, 3).concat(a.slice(-3));

document.write(b);
console.log(b);

Array.prototype.concat 没有副作用,这意味着它不会修改原始数组(即 b

我看到有两种方法可以实现你想要的:

concat的结果赋值给b(它会破坏对原始数组的引用,因为它是一个全新的数组)

b = b.concat(a.slice(0,3), a.slice(-3));

或使用Array.prototype.pushapply就地修改b

Array.prototype.push.apply(b, a.slice(0,3).concat(a.slice(-3)));

这个有点棘手。为什么要使用 apply

因为 b.push(a.slice(0, 3), a.slice(0 - 3)) 会导致不同的结构:[[...], [...]]

有关 apply 的详细信息,请参阅 Function.prototype.apply

的文档

我理解你。一些较旧的 JS 数组函数非常愚蠢。它们不会 return 你想要的,就像 push() 一样 return 是结果数组的长度,而不是 return 对结果数组的引用。有时我想删除一个项目并将结果数组作为参数同时传递给函数。这就是你的问题所在。我有一个数组

var arr = [1,2,3,4,5,6,7,8,9];

我想删除第 5 项并将数组作为参数传递。假设 i 是 4.

myRecursiveFunction(arr.splice(i,1));

不会剪。愚蠢的做法是将数组中删除的元素传递给函数,而不是传递对所调用数组的引用。但我不想做几个指令。我只想将它作为单个指令的 return 值传递给函数。所以我必须想出像这样的发明。

myRecursiveFunction(arr.slice(0,i).concat(arr.slice(i+1)));

谁有更好的主意请告诉我。