定义与第一元件在JS空数组[闭合]

问题描述 投票:3回答:2

我看到有一个阵列定义为[,EL1,EL2],我从来没有见过这样定义的数组。如果我这样定义的方式,是指第一个元素是取消定义?

const targetItems = [1, 2, 3, a, b, c].map( items=>{  
    const matches = itmes.match([a-z])
    const [, targetItems , remainItems] = matches
})

在这种情况下,比赛应该be[a, b, c],但最终阵列应该是什么样子?

javascript arrays
2个回答
3
投票

这是一个destructuring assignment不是数组宣言。此代码:

 const [, targetItems , remainItems] = matches

相当于:

 const targetItems = matches[1]
 const remainItems = matches[2]

你基本上创建两个变量,它们结合到阵列中的第二个和第三个元素的值。逗号使用,那么可以跳过你不感兴趣的元素。您还可以使用传播语法,因此,例如:

const [, x, , y, ...end] = ['a','b','c','d','e', 'f']

console.log(x) // "b"
console.log(y) // "d"
console.log(end) // ["e", "f"]

说,你绝对可以还创建一个空槽阵列:

const arr = [, 10];

在这种情况下,比赛应该是[A,B,C],但最终阵列应该是什么样子?

在你的代码贴出没有return的阵列功能(即用括号所以需要声明),因此该数组将被映射到undefined每个元素。

更新

const matches = itmes.match([a-z])

假设itmesitems一个错字,我也认为items.match([a-z])实际上是items.match(/[a-z]/)因为它没有任何意义,否则 - match需要一个正则表达式作为参数,即使类型强制它将使不及义相对于一个正则表达式错字的代码。

然而,即使在这种情况下,代码将无法正常工作,因为match会返回一个元素,使得整个解构没用 - 返回的唯一元素是一个丢弃。此外,它会返回只有一个字母。

相信原代码会略有不同(例如具有用于正则表达式一个全局标志,和/或一些量词,例如“+”);所以这是很难搞清楚什么是从提供的代码的最终结果。


5
投票

该生产线

const [, targetItems, remainItems] = matches

不创建(或“定义”)的阵列。它destructures阵列成单个变量(当然,在这种情况下的常数)。这相当于:

const targetItems = matches[1];
const remainItems = matches[2];

由于是在第一位置([之后和之前的,)无标识的名称,第一个条目(matches[0])不存储。

这就是所谓的数组解构。 (JavaScript的也有对象解构。)

......最终的阵列应该是什么样子?

在该代码,targetItems将是一个六进入阵列包含值undefined所有条目因为map回调从不返回一个值,因此调用它导致undefined。回调应该使用return返回一个值(或使用其隐含的回报箭头函数的形式简洁,但它不能做到这一点与声明中的话)。

作为ZER0 points out,虽然,它是现代的JavaScript有效的数组初始化离开了条目:

const a = [ , "one", "two", , "four"];
console.log(a.length); // 5
console.log(a[0]);     // undefined
console.log(0 in a);   // false (because there's no entry at all)
console.log(a[1])      // "one"
console.log(1 in a);   // true

这不是什么问题的代码是干什么的,但关于解构伟大的事情之一是,它的语法是数组解构语法完全一样数组初始化(“文字”)语法和对象解构语法是完全一样的作为对象初始化(“字面”)的语法。只是,当它是在赋值的右手侧(或在参数列表),它的解构现有阵列/对象,而不是创建一个。


这条线是高度怀疑:

const matches = itmes.match([a-z])

它期望有是两个在范围内的标识符,az,然后减去从z a,并使用所得到的值来创建一个数组,然后传递该阵列分成matchitmes(原文如此)。我认为生产线的在某些时候得到了乱码...

© www.soinside.com 2019 - 2024. All rights reserved.