javascript - 可以将空槽推到数组中吗?
问题描述
我正在构建自己的地图方法,使其与本机地图方法一样接近。由于本机地图将(我认为)更改的值推送到新数组中,因此它仍然保留空槽。我找不到将空插槽推入数组的解决方案,如下面的示例。
[1, 2, 3].push(some code) // [1, 2, 3, empty]
我尝试推送一个带有一个以扩展运算符为前缀的空项目的数组,arr.push(...(new Array(1)))
或者arr.push(...[,])
只是推送undefined
.
我通过不使用 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);
推荐阅读
- typescript - 在 Typescript 中更改数组项的类型
- python - Python - 如何在 Python 中使用逗号分隔(将一行分成三列)
- mysql - 在 MySQL 中选择最多 5 个结果的多个类别
- c# - 如何预编译 Razor 视图的一部分?
- node.js - Node.JS 中未显示子进程输出
- c++ - C++ 中的字符串到 UTF-8 的转换
- python - 将标签转换回原始编码
- python - 没有在哪里部署 Python Flask API 项目
- r - 绘制气泡图:单个轴上的所有路径项
- python - /profile/ 处的 AttributeError