我有一个数组:
array = ['mario','luigi','kong']
我将其拼接功能称为删除索引之前的所有项:
array.splice(1) //-> ['luigi','kong']
我只是想知道是否有类似于拼接的功能来删除索引后的所有项 :
伪代码
array.mirrorsplice(1) //-> ['mario','luigi']
答案 0 :(得分:92)
使用.length
为数组设置一个新的大小,这比splice()更快地变异:
var array = ['mario','luigi','kong', 1, 3, 6, 8];
array.length=2;
alert(array); // shows "mario,luigi";
为什么它更快?因为.splice()
必须创建一个包含所有已删除项的新数组,而.length
不创建任何内容并“返回”数字而不是新数组。
要解决splice()
的使用问题,您可以为其提供一个负数索引,以及一个巨大的数字来切断数组的结尾:
var array = ['mario','luigi','kong'];
array.splice(-1, 9e9);
alert(array); // shows "mario,luigi";
答案 1 :(得分:8)
虽然为数组长度分配一个较短的值(如@dandavis所说)是从数组中删除尾随元素的最快最简单的方法,但您也可以使用类似已知的splice方法来实现为slice。 如下:
array = ['mario', 'luigi', 'kong'];
array = array.slice(0, 2); //Need to assign it to the same or another variable
console.log(array); //["mario", "luigi"]
如您所见,您需要存储slice
方法返回的值。要了解“为什么”,以下是slice
和splice
方法之间的主要区别:
splice()
方法返回数组中已删除的项,slice()
方法返回数组中的选定元素,作为新的数组对象。splice()
方法更改原始数组,slice()
方法不会更改原始数组。答案 2 :(得分:3)
要在索引后删除 所有项目:
var array = ['mario','luigi','kong'],
index = 1; // your index here
array.splice(index + 1, array.length - (index + 1) );
// 3 - (1+1) = 1
// 1 is the remaining number of element(s) in array
// hence, splice 1 after index
结果:
['mario', 'luigi']
您需要+1,因为拼接开始从索引处删除。
答案 3 :(得分:1)
我认为您误解了Array.prototype.splice()
的用法。它已经满足您的要求(删除索引后的所有内容,请阅读以下段落进行更正),并且确实返回已删除的值。我认为您对返回值作为数组的当前值感到困惑。
Array.prototype.splice()
但是也会删除提供的索引值,这基本上等同于设置数组的长度。因此,如果您将其命名为array.splice(2)
,则会将长度设置为2,并且所有内容(包括索引2及之后的值)都将被删除。前提是该数组的当前长度大于提供给Array.prototype.splice()
的第一个参数。
例如:
const array = ['mario','luigi','kong'];
const deletedItem = array.splice(1);
console.log(array); // ['mario']
console.log(deletedItem); // ['luigi','kong']
有关更多信息,请参见the MDN doc。
答案 4 :(得分:0)
您可以使用拼接。这是一个演示。
var array = ['mario','luigi','kong']
要删除索引后的所有元素:
var removedElement = array.splice(index, array.length)
removedElement 将具有从数组中删除的元素列表。
示例:
let index = 2;
var removedElement = array.splice(2, array.length);
removedElement = ["kong"];
array = ["mario", "luigi"];