Array.splice()可以通过在数组的最后一个元素之外的索引处添加一个元素来创建稀疏数组吗?“我需要这样做,因为在某些情况下,我只是想推到数组上,但在其他情况下,我需要将数组连接到数组中。但是试图使用剪接使数组稀疏不起作用,尽管在特定情况下,我能够实现一些代码来测试是否使用拼接,或者只是在数组长度之外的索引上分配数组元素。
发布于 2015-12-30 17:41:49
不是的。ECMAScript规范不允许相对起始位置大于数组长度。从Array.prototype.splice,步骤7:
变量actualStart实际上用于splice算法。它由relativeStart (函数的第一个参数)和len (数组的length )的最小值产生。如果len小于relativeStart,那么splice操作将使用len代替实际提供的参数。
实际上,这意味着只能将值附加到数组的末尾。您不能使用splice定位一个新元素通过length索引。
发布于 2015-12-30 17:47:14
应该注意的是,数组的长度不一定是数组中最后一项的索引加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发布于 2015-12-30 17:34:07
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]); // foobarhttps://stackoverflow.com/questions/34534295
复制相似问题