我正在构建自己的 map 方法,使其与 native map 方法一样接近。 由于 native map 将(我认为)更改的值推送到一个新数组中,因此它仍然保留空槽。我找不到将空插槽插入数组的解决方案,如下例所示。
[1, 2, 3].push(some code) // [1, 2, 3, empty]
我尝试推送一个数组,其中一个空项以扩展运算符 arr.push(...(new Array(1)))
或 arr.push(... [,])
但那只是压 undefined
。
我解决了我的 problem通过不使用 push 而是将值分配给数组索引,这样跳过的索引将被设置为空。
但我写这篇文章是想看看是否有人知道是否可以使用 push 方法将空插槽推送到数组。
最佳答案
不,这是不可能的,不能使用 push
方法。 empty
只有在数组有一定长度的情况下才能存在,但数组的整数属性在某个索引处不存在。这称为稀疏数组,不能使用push
(或其他数组方法,如果它们被调用并使用非稀疏数组)创建。
这样做的唯一方法是分配给一个较低索引尚不存在的索引。
在浏览器控制台中查看以下两个片段的结果,而不是片段控制台:
const arr = [];
arr[1] = 'a';
console.log(arr);
或者将数组的 .length
设置在数组的最后一个索引之上:
const arr = [];
arr.length = 1;
console.log(arr);
但是上面的两种方法非常奇怪,可能没有充分的理由使用。最好完全避免稀疏数组。
请记住,空槽不同于 undefined
,后者完全可以作为数组值:
const arr = [];
arr.push(undefined);
console.log(arr);
关于javascript - 可以将空插槽推送到数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56659890/