此站点有类似的问题:可以将空槽推送到数组吗?我想知道回调是否可以Array.prototype.map
返回一个空槽。
我尝试了这个但它返回undefined
的是:
console.log([1, 2, 3].map(() => {}));
我想返回空槽,以便我可以简单地调用flat()
返回值来删除它们。flat()
不会删除undefined
或null
值。
我知道这个.filter(Boolean)
技巧,但我不喜欢这个解决方案,因为它是错误的,并且我从来没有打算将其作为删除/元素0
的副作用来删除:根据我的经验,它是代码中的定时炸弹。null
undefined
.filter(Boolean)
不,这是不可能的。回调函数总是返回一个值(或抛出异常),而空槽则是由于没有值而“创建的” 。空槽是一个不存在的属性,尽管它位于
0
数组的 和之间.length
。map()
函数总是为回调函数调用返回的值创建属性。不,不可能从 返回一个空槽
Array.prototype.map
,因为对正在构建的数组的引用没有传递给map
的参数函数,并且空槽是通过设置数组的属性来增加数组的长度length
,或者delete
在数组内的元素上使用运算符来创建的。出于兴趣,这里有一个通过设置来创建稀疏数组的简单示例
length
:[注意:在上面的代码中,代码片段
console.log
函数似乎不符合标准,没有记录格式化字符串参数之后的剩余参数以及格式字符串使用的值。]一种非常普通的替代方法是迭代输入数组并将要保存的元素推送到输出数组,或者如果平面数组输出中不需要它们,则不推送它们。
这听起来就像你在问的。如果不是,我错过了什么?
编辑
我认为问题在于你请求空槽,然后建议使用
array.prototype.flat
来清理这些空槽。感觉大多数人都知道flat
连接嵌套数组,但它也会清理稀疏数组。似乎只有几种方法可以创建稀疏数组,但这
array.prototype.map
不是其中之一。稀疏数组使用空数组代替: