javascript - 可以将空插槽推送到数组吗?

标签 javascript arrays

我正在构建自己的 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/

相关文章:

javascript - 如何加载 JSON 数组以使用 Angular-Translate 翻译 AngularJS 网页

javascript - Limit = 1 = 1ms, Limit > 1 = 150ms (mongo-melt-down)

javascript - 在表单上跳转到页面顶部提交到新页面

c - 调试错误选择排序

ios - 如何从包含字典的数组中检索和显示 TableView 中的数据?

javascript - 从 iPad 创建 Canvas 图像

javascript - 我应该如何考虑对象文字中的属性定义?

arrays - 为什么我的 Perl 循环最后关闭了 1?

android listview和arrayList数据优化

javascript - 用 JavaScript 替换数组中的最后 N 项