我有一个数组:
array = ['mario','luigi','kong']
我调用它的splice函数,以删除索引之前的所有项:
array.splice(1) //-> ['luigi','kong']
我在想是否有一个类似于splice的函数,可以删除指定索引后面的所有项:
伪代码
array.mirrorsplice(1) //-> ['mario','luigi']
我有一个数组:
array = ['mario','luigi','kong']
我调用它的splice函数,以删除索引之前的所有项:
array.splice(1) //-> ['luigi','kong']
我在想是否有一个类似于splice的函数,可以删除指定索引后面的所有项:
伪代码
array.mirrorsplice(1) //-> ['mario','luigi']
使用Array.length
来设置数组的新大小,这比使用Array.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";
length
属性会导致内存泄漏吗?还是 JavaScript 引擎会处理好这一点?--- 根据 ECMAScript 规范,这已经被明确定义并正确处理,元素将被删除。参考链接:https://dev59.com/a1wZ5IYBdhLWcg3wWvRY#31560542 - Daniel Farray.splice(0, Infinity)
。我的意思是,我难以相信你会有一个包含超过9000000000个元素的数组...但当你有理由在JS中使用Infinity关键字时,你会感觉很酷 :) - James Harrington6, 8
吗?因为我不知道如何使用长度技巧获取数组中的最后元素。这只能用splice实现,对吗? - Hangfish.slice(-2)
。如果你需要收集你删除的元素,请使用.splice()
。 - dandavisconst maxLen = 3; if (array.length > maxLen) array.length = maxLen;
否则,您将在已经足够短的数组中添加空值。 - mattsoavearray = ['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()
方法不更改原始数组。要在索引之后删除所有项:
var array = ['mario','luigi','kong'],
index = 1; // your index here
array = 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']
由于splice从索引开始删除,因此您需要+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']
更多信息请参见MDN文档。
var array = ['mario','luigi','kong']
要删除索引之后的所有元素:
var removedElement = array.splice(index, array.length)
removedElement数组将包含从array中移除的元素列表。
示例:
let index = 2;
var removedElement = array.splice(2, array.length);
removedElement = ["kong"];
array = ["mario", "luigi"];
originalArray = originalArray.slice(0, 1000)