如何删除数组中的元素?

36

是否可以根据索引删除数组的内容?如果我有两个如下的数组:

包含15个值的Array1,我想获取最后10个值。

在删除元素之前:

array1 == [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]

移除元素后:

array1 == [5,6,7,8,9,10,11,12,13,14]

我有一个包含15个值的Array2,我想要获取其中的前10个值。

移除元素之前:

array2 == [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]

移除元素后:

array2 == [0,1,2,3,4,5,6,7,8,9]

但必须满足以下条件:

如果数组只包含3个元素,则无需丢弃数组中的元素,同样,如果数组仅包含10个元素,则也不需要丢弃。但是,如果数组包含超过10个元素,则多余的元素将被丢弃。

4个回答

71

保留前十个项目:

if (theArray.length > 10) theArray = theArray.slice(0, 10);

或者,也许不太直观的是:

if (theArray.length > 10) theArray.length = 10;
保留最后十项:
if (theArray.length > 10) theArray = theArray.slice(theArray.length - 10, 10);

您可以使用负值作为第一个参数来指定长度-n,省略第二个参数获取所有项目到结尾,因此也可以这样写:

if (theArray.length > 10) theArray = theArray.slice(-10);

splice 方法用于删除项目并替换为其他项目,但如果您未指定新项目,则可以仅用于删除项目。要保留前十个项目:

if (theArray.length > 10) theArray.splice(10, theArray.length - 10);
保留最后十个元素:
if (theArray.length > 10) theArray.splice(0, theArray.length - 10);

5
记住,splice 会修改原始数组,而 slice 则不会。 - Lukas Liesis
@LukasLiesis 这一直让我感到不舒服,因为它感觉上像是一个不一致性。如果有人知道原因,我很想知道! - Dan Atkinson
为了保留最后的N个项目,您也可以反转集合长度,然后再次反转(或者如果您不关心顺序,则保持不变)。 - user1514042

18
使用函数array.splice(index, count)删除index处的count个元素。如果要从末尾开始删除元素,请使用array1.splice(array1.length - 10, 1);

嗯,我不知道你所说的索引和计数是什么意思,你能解释一下吗? - user495688
@user495688 索引指示了开始移除项目的位置和要移除的项目数。例如,array.splice(0,5)将删除从索引0开始的5个项目。换句话说-从开头开始。 - Lukas Liesis

5

请查看splice()

splice()方法通过删除现有元素和/或添加新元素来更改数组的内容。

它不会创建新的数组,如果你想创建新的数组,请使用slice


也许我误解了你的意思,但它确实为我创建了一个新数组(并改变了现有数组)。例如:var b = a.splice(0, 3) - Alex

4

有点难理解你的问题,但是可以尝试以下几点:

array = array.slice(-10);

// or

last10 = array.splice(-10);
// array has first array.length-10 elements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接