如何连接 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.push和apply
就地修改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)));
谁有更好的主意请告诉我。
我有:
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.push和apply
就地修改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)));
谁有更好的主意请告诉我。