首页 > 解决方案 > 可以将空槽推到数组中吗?

问题描述

我正在构建自己的地图方法,使其与本机地图方法一样接近。由于本机地图将(我认为)更改的值推送到新数组中,因此它仍然保留空槽。我找不到将空插槽推入数组的解决方案,如下面的示例。

[1, 2, 3].push(some code) // [1, 2, 3, empty]

我尝试推送一个带有一个以扩展运算符为前缀的空项目的数组,arr.push(...(new Array(1)))或者arr.push(...[,])只是推送undefined.

我通过不使用 push 而是将值分配给数组索引来解决我的问题,这样跳过的索引将设置为空。

但是我写这篇文章是想看看是否有人知道是否可以使用 push 方法将一个空槽推送到数组中。

标签: javascriptarrays

解决方案


不,这是不可能的,不是用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);


推荐阅读