Javascript 这个concat命令如何处理这个数组?
我遇到了这个JS问题,但我不知道它是如何工作的语法,有人能帮我解释一下吗?我不理解开始时的空方括号语法,以及concat是如何与另一个空方括号一起应用的?这让我很困惑 感谢您的帮助Javascript 这个concat命令如何处理这个数组?,javascript,arrays,apply,Javascript,Arrays,Apply,我遇到了这个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 ] []是一个空数组。conca
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的第二个参数是参数数组。就像这样做(如果您熟悉Destructuring的概念):
[].concat(…arr)
您可以阅读更多有关应用的信息,让我们一步一步地进行
[].concat()
只是函数,因为apply
不是对常规元素调用的,而是对函数调用的。前面的[]
用于调用concat
,因为它是数组的一种方法。
该方法调用具有给定此值的函数,并以数组形式提供参数因此,
[].concat.apply([],arr)
有三个部分:
-使用的功能concat
-调用函数的元素(函数的第一个参数) 申请表(已提供)[]
-传递给每个所用函数的元素数组 时间arr
[].concat([1, 2]).
.concat([3, 4])
.concat([5, 6]) //etc
然后返回连接的数组并将其存储到展平的中。现在,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()
方法。这里这个
是第二个
数组。然后扔掉第一个数组
然后apply()
方法将arr
数组展平到一个级别。
您可以查看:
let foo=[0].concat([1,2,3],[1,2,3]];
console.log(foo)
谢谢@steppup那么应用函数中的空数组有什么意义呢?我知道这意味着引用一个“this”对象,但在这种情况下没有“this”对象,是吗?如果你能解释得更多,我仍然被这两组空方括号弄糊涂了。@jobe,请看我更新的答案谢谢@Steppup,如果我理解正确,调用concat后第一个[]基本上被忽略了,然后是第二组[]基本上被用于concat每个参数?所以您总是需要第二组[],不能使用null或其他任何东西。@jobe,请参阅我关于第一个数组问题的更新答案。第二个问题的答案可能是这样的:您可以使用任何您想要的类型,因为这将是上下文。这就是apply()
的工作原理。然而,然后concat
方法将把它作为一个参数处理,并将它放入平坦数组中。尝试测试它console.log(Array.prototype.concat.apply({foo:'bar'},arr))代码>谢谢@stepp我接受了你的回答。所以第一个数组的[]有点像array.prototype的缩写?是吗?你确定关于申请的解释吗?那么首先使用apply的第一个参数调用concat,它是空数组?我以为它是由参数调用的,第一个参数就是“this”上下文?这就是让我困惑的地方。把它改了一点。最初的解释不是很好。