这个 concat 命令如何与这个数组一起工作?
how does this concat command work with this array?
我遇到了这个 JS 问题,但我无法弄清楚它是如何工作的语法,有人可以帮忙解释一下吗?我不明白开头的空方括号语法以及如何将 concat 与另一个空方括号一起应用?这让我很困惑。
感谢任何帮助来解决这个问题。
let arr = [[1, 2],[3, 4],[5, 6, 7, 8, 9],[10, 11, 12]];
let flattened = [].concat.apply([], arr);
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
[] 是一个空数组。 concat 函数连接两个或多个数组:[].concat(arr[0], arr[1], arr[2], arr[3])
这里的要点是了解 apply 的工作原理。 apply 的第二个参数是一个参数数组。就像这样做(如果您熟悉解构的概念):
[].concat(...arr)
您可以阅读更多关于申请的信息here
所以让我们一步步来吧。
[].concat()
只是函数,因为 apply
不是调用常规元素,而是函数。使用前面的 []
只是为了让您可以调用 concat
,因为它是数组的一种方法。
apply()
方法调用具有给定 this 值的函数,并以数组形式提供参数。
所以 [].concat.apply([], arr)
有 3 个部分:
concat
- 使用的函数
[]
- 调用函数的元素(第一个参数
提供的申请)
arr
- 传递给所用函数的元素数组
时间
所以在引擎盖下它看起来像这样:
[].concat([1, 2]).
.concat([3, 4])
.concat([5, 6]) //etc
然后返回连接的数组并存储到flattened
中。现在 arr
的每个子数组都已相互连接并生成一个简单的数组 [1, 2, 3, 4, 5, 6, ...]
let arr = [[1, 2],[3, 4],[5, 6, 7, 8, 9],[10, 11, 12]];
let flattened = [].concat.apply([], arr);
*first array*---| |---*second array*
first
数组有一个目标:
- 用
this
调用 concat()
方法。这里 this
是 second
数组。然后first
数组被扔掉
然后 apply()
方法将 arr
数组展平到一级。
您可以查看:
let foo = [0].concat([1,2,3], [[1,2,3]] );
console.log(foo)
更新:
另外,可以去掉第一个数组:
const arr = [[1, 2],[3, 4],[5, 6, 7, 8, 9],[10, 11, 12]];
const flattened = Array.prototype.concat.apply([], arr);
console.log(flattened)
有关 apply()
工作原理的一些信息。
此外,了解 apply()
如何将数组项展平到一个级别或 apply()
如何采用参数数组并将该数组的每个元素视为单个参数将非常有用.
让我举一个简单的例子。我们有以下对象和方法:
const showFullName = (arg_1, arg_2) => {
console.log(`arg_1 is ${arg_1}`);
console.log(`arg_2 is ${arg_2}`);
}
let foo = {};
showFullName.apply(foo, ['firstName', 'surname']);
我遇到了这个 JS 问题,但我无法弄清楚它是如何工作的语法,有人可以帮忙解释一下吗?我不明白开头的空方括号语法以及如何将 concat 与另一个空方括号一起应用?这让我很困惑。
感谢任何帮助来解决这个问题。
let arr = [[1, 2],[3, 4],[5, 6, 7, 8, 9],[10, 11, 12]];
let flattened = [].concat.apply([], arr);
// [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
[] 是一个空数组。 concat 函数连接两个或多个数组:[].concat(arr[0], arr[1], arr[2], arr[3])
这里的要点是了解 apply 的工作原理。 apply 的第二个参数是一个参数数组。就像这样做(如果您熟悉解构的概念):
[].concat(...arr)
您可以阅读更多关于申请的信息here
所以让我们一步步来吧。
[].concat()
只是函数,因为 apply
不是调用常规元素,而是函数。使用前面的 []
只是为了让您可以调用 concat
,因为它是数组的一种方法。
apply()
方法调用具有给定 this 值的函数,并以数组形式提供参数。
所以 [].concat.apply([], arr)
有 3 个部分:
concat
- 使用的函数[]
- 调用函数的元素(第一个参数 提供的申请)arr
- 传递给所用函数的元素数组 时间
所以在引擎盖下它看起来像这样:
[].concat([1, 2]).
.concat([3, 4])
.concat([5, 6]) //etc
然后返回连接的数组并存储到flattened
中。现在 arr
的每个子数组都已相互连接并生成一个简单的数组 [1, 2, 3, 4, 5, 6, ...]
let arr = [[1, 2],[3, 4],[5, 6, 7, 8, 9],[10, 11, 12]];
let flattened = [].concat.apply([], arr);
*first array*---| |---*second array*
first
数组有一个目标:
- 用
this
调用concat()
方法。这里this
是second
数组。然后first
数组被扔掉
然后 apply()
方法将 arr
数组展平到一级。
您可以查看:
let foo = [0].concat([1,2,3], [[1,2,3]] );
console.log(foo)
更新:
另外,可以去掉第一个数组:
const arr = [[1, 2],[3, 4],[5, 6, 7, 8, 9],[10, 11, 12]];
const flattened = Array.prototype.concat.apply([], arr);
console.log(flattened)
有关 apply()
工作原理的一些信息。
此外,了解 apply()
如何将数组项展平到一个级别或 apply()
如何采用参数数组并将该数组的每个元素视为单个参数将非常有用.
让我举一个简单的例子。我们有以下对象和方法:
const showFullName = (arg_1, arg_2) => {
console.log(`arg_1 is ${arg_1}`);
console.log(`arg_2 is ${arg_2}`);
}
let foo = {};
showFullName.apply(foo, ['firstName', 'surname']);