Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 定义JS中第一个元素为空的数组_Javascript_Arrays - Fatal编程技术网

Javascript 定义JS中第一个元素为空的数组

Javascript 定义JS中第一个元素为空的数组,javascript,arrays,Javascript,Arrays,我看到有一个数组被定义为[,el1,el2],我从未见过这样定义数组的方法。如果我这样定义,是否意味着第一个元素未定义 const targetItems = [1, 2, 3, a, b, c].map( items=>{ const matches = itmes.match([a-z]) const [, targetItems , remainItems] = matches }) 在这种情况下,匹配项应该是[a,b,c],但是最终的数组应该是什么样的呢 线路

我看到有一个数组被定义为[,el1,el2],我从未见过这样定义数组的方法。如果我这样定义,是否意味着第一个元素未定义

const targetItems = [1, 2, 3, a, b, c].map( items=>{  
    const matches = itmes.match([a-z])
    const [, targetItems , remainItems] = matches
})
在这种情况下,匹配项应该是
[a,b,c]
,但是最终的数组应该是什么样的呢

线路

const [, targetItems, remainItems] = matches
不创建(或“定义”)数组。它将数组转换为单个变量(本例中为常量)。这相当于:

const targetItems = matches[1];
const remainItems = matches[2];
 const targetItems = matches[1]
 const remainItems = matches[2]
由于第一个位置(在
[
之后和
之前)没有标识符名称,因此第一个条目(
匹配[0]
)不会存储在任何位置

这称为数组分解(JavaScript也有对象分解)

…最终阵列应该是什么样子

在该代码中,
targetItems
将是一个六项数组,其中所有项都包含值
undefined
,因为
map
回调从不返回值,因此调用它会导致
undefined
。回调应使用
return
返回值(或者使用带有隐式返回的arrow函数的简明形式,但不能使用其中的语句)

但是,在现代JavaScript中,在数组初始值设定项中省略条目是有效的:

const a=[,“一”,“二”,“四];
console.log(a.length);//5
console.log(a[0]);//未定义
console.log(a中的0);//false(因为根本没有条目)
console.log(a[1])/“一”
console.log(a中的1);//true
这是一个数组声明,而不是数组声明。此代码:

 const [, targetItems , remainItems] = matches
相当于:

const targetItems = matches[1];
const remainItems = matches[2];
 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])
假设
itmes
items
的输入错误,我也会假设
items.match([a-z])
实际上是
items.match(/[a-z]/)
,因为它在其他情况下没有意义——将regexp作为参数,即使使用类型强制,代码与regexp输入错误相比也没有意义

但是,即使在这种情况下,代码也无法工作,因为
match
只返回一个元素,这使得整个解构过程毫无用处–返回的唯一元素是丢弃的元素。此外,它只返回一个字母


我相信原始代码会略有不同(例如,regexp有一个全局标志,和/或一些量词,如“+”);因此,很难从提供的代码中找出最终结果。

和adiga的可能重复可能是正确的,尽管问题的最后一句问了一些其他问题。确实有点不清楚。