Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回箭头函数中的扩展数组_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 返回箭头函数中的扩展数组

Javascript 返回箭头函数中的扩展数组,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我有这种类型的数组: [[1,2],[3,4] 我需要做的是在更高的层上获得嵌套元素,使其看起来像: [1,2,3,4] 我正试图以函数的方式实现这一点,因此代码如下所示: const arr = [ [1, 2], [3, 4] ] const f = Array.from(arr, x => ...x) 但这带来了意外标记…错误。那么正确的方法是什么呢?您可以使用平面数组方法: constinp=[[1,2],[3,4]; console.log(inp.flat())数组。f

假设我有这种类型的数组:

[[1,2],[3,4]

我需要做的是在更高的层上获得嵌套元素,使其看起来像:

[1,2,3,4]

我正试图以函数的方式实现这一点,因此代码如下所示:

const arr = [ [1, 2], [3, 4] ]
const f = Array.from(arr, x => ...x)

但这带来了
意外标记…
错误。那么正确的方法是什么呢?

您可以使用
平面
数组方法:

constinp=[[1,2],[3,4];

console.log(inp.flat())
数组。from
将为传入的数组中的每个项目生成一个项目。它查看传入iterable的
长度
,并从0开始迭代索引。因此,无论您在回调中做什么(假设它是有效的),如果传入一个两元素数组,您都将得到一个长度为2的数组输出

reduce()

让arr=[[1,2],[3,4]]
放平=arr.reduce((arr,item)=>[…arr,…item])

log(平面)
您可以为数组创建迭代器,并使用另一个用于嵌套数组的生成器来扩展数组

函数*flat(){
for(此.slice()的变量项){
if(阵列isArray(项目)){
item[Symbol.iterator]=flat;
收益率*项目
}否则{
收益项目;
}
}
}
变量数组=[[1,2],[3,4,5,6]];
数组[Symbol.iterator]=flat;

log([…数组])有一个。看看它。嵌套的元素总是数组吗?您的混淆源于这样一个事实,即扩展语法不是运算符。这是一种上下文语法。@Xufox谢谢
flat
对我来说似乎很好。可能值得一提的是,它(目前)在Edge、Internet Explorer或Node上不起作用。@PatrickRoberts您使用的是哪个版本?它从chrome开始工作69@PatrickRoberts你可以在这里查看浏览器兼容性:chrome还支持
flatMap
噢,我设置了一个标志,这是我的错。这很酷。如果
flat()
将数组作为一个参数并递归调用,这样可能会更好,这样可以避免更改子数组的副作用。但是你必须调用
[…平面(数组)]