可以使用Array.splice()通过在数组最后一个元素之外的索引处添加元素来创建稀疏数组吗

Can Array.splice() be used to create a sparse array by adding an element at an index beyond the last element of the array?

本文关键字:数组 元素 添加 索引 创建 splice 可以使 最后一个 Array      更新时间:2023-09-26

Array.splice()是否可以通过在数组最后一个元素之外的索引处添加元素来创建稀疏数组?"我需要这个,因为在某些情况下我只想推到数组上,但在其他情况下我需要拼接到数组中。但尝试使用拼接来使数组稀疏是行不通的,尽管在我的特定情况下,我能够实现一些代码来测试是使用拼接,还是只在超出数组长度的索引处分配一个数组元素。

否。ECMAScript规范不允许相对起始位置大于数组长度。从Array.prototype.splice上的ES2015开始,步骤7:

  1. 。。。设actualStart为min(relativeStartlen

变量actualStart实际用于splice算法。它由relativeStart(函数的第一个参数)和len的最小值(数组的length)产生。如果len小于relativeStart,则splice操作将使用len而不是提供的实际参数。

实际上,这意味着您只能将值附加到数组的末尾。不能使用splice将新元素放置在length索引之后。

需要注意的是,数组的长度不一定是数组中最后一项的索引加1。它可以更大。

然后,不能使用splice插入超出数组长度的元素,但如果确保长度足够大,则可以插入超出最后一个索引加1的元素。

var arrSplice = ['what', 'ever'];
arrSplice.length = 10; // Increase the capacity
arrSplice.splice(10, 0, 'foobar'); // Now you can insert items sparsely
console.log(arrSplice.length); // 10
console.log(arrSplice[arrSplice.length - 1]); // foobar

Array.splice()不能用于创建稀疏数组。相反,如果传递给Array.splice()的索引参数超出了数组的长度,则该元素似乎只是被附加到数组中,就好像使用了Array.push()一样。

/* How you might normally create a sparse array */
var arrNoSplice = ['foo', 'bar'];
arrNoSplice[10] = 'baz';
console.log(arrNoSplice.length); // 11
/* Demonstrates that you cannot use splice to create a sparse array */
var arrSplice = ['what', 'ever'];
arrSplice.splice(10, 0, 'foobar');
console.log(arrSplice.length); // 3
console.log(arrSplice[arrSplice.length - 1]); // foobar