从数组中删除最后一个项目

797

我有以下数组。

var arr = [1,0,2];

我想要移除最后一个元素2。

我使用了arr.slice(-1);,但它并没有移除该值。


54
使用 arr[.pop()] 方法。(该方法的具体说明请参考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/pop) - Tushar Gupta - curioustushar
3
arr.splice(-1,1) 将返回数组 [1,0]; arr.slice(-1,1) 将返回 [2]。 - Anja Ishmukhametova
40
arr.slice(0,-1) 对我来说是最佳解决方案。 - Black Mamba
14
这个问题有点含糊,因为“删除最后一个元素”可能意味着从数组中移除该元素并保留该数组(只是元素减少了一个)。但它也可能意味着删除该元素并保留该元素。对于第一种情况,可以使用 splice() 方法;对于第二种情况,可以使用 pop() 方法。 - thoni56
1
@Anja Ishmukhametova在2015年的评论中提到的代码格式化:"arr.splice(-1,1)会返回数组[1,0]arr.slice(-1,1)会返回[2]" - Cadoiz
显示剩余2条评论
29个回答

2

假设你有var arr = [1,0,2]

arr.splice(-1,1)会返回数组[1,0];arr.slice(-1,1)会返回数组[2];


2
使用展开运算符:

const a = [1,2,3]
const [, ...rest] = a.reverse();
const withoutLast = rest.reverse();
console.log(withoutLast)


1
这是一种很好的方法来移除最后一个项目:

if (arr != null && arr != undefined && arr.length > 0) {
      arr.splice(arr.length - 1, 1);
}

以下是splice的详细信息:

splice(startIndex, splice的数量)


1
var stack = [1,2,3,4,5,6];

stack.reverse().shift();

stack.push(0);

输出将是:数组[0,1,2,3,4,5]。 这将允许您在推入新值时保持相同数量的数组元素。

你需要在移位或推入操作后再进行一次反转,以恢复正确的顺序。 - cyptus
反转函数会将原始数组进行反转。我曾经因此被卡住过一两次... - Simon_Weaver

1

如果你想从 JavaScript 数组的末尾删除 n 个元素,你可以很容易地使用以下代码:

arr.splice(-n, n);

1

如果你正在寻找一个不需要初始化多个变量的一行代码:

var arr = [1,0,2];

arr = arr.filter((_,i,a) => i !== (a.length-1));

解释: 我们正在使用Array Filter Method,它接受3个回调函数:

  1. element (_):迭代期间的当前元素
  2. index (i):元素迭代的索引
  3. array (a):用于过滤的数组

因此,如果它是正在使用的array中的最后一个元素,我们就跳过该元素。

_只是一个占位符,因为我们实际上没有使用它。


这样做会返回一个数组,而不是使用splice()或pop()删除的项。 - Everything Digital

0

只需要使用arr.splice(-1)即可。


不,要删除最后一项请使用 arr.slice(0, -1),并且这不是一个修改,它应该像这样保存:var newArray = arr.slice(0, -1) - Ardit Hyka
我同意@diti的看法,这只是我建议的一种简写方式。 - Sumit Ramteke

-1
// Setup
var myArray = [["John", 23], ["cat", 2]];

// Only change code below this line
var removedFromMyArray;
removedFromMyArray = myArray.pop()

请在原始代码之外添加一些注释,以使其成为一个更好的答案。 - Logemann

-9

我得到了最好的答案!

var array = [1, 2, 3, 4]
array.length = array.length - 1

console.log(array)
> [1, 2, 3]

老实说,JS现在已经成为一个梗了。

附注:这会影响变量及其任何引用,如果你不想影响变量的任何引用,可以这样做:

var array = [1, 2, 3, 4]
var modifiedArray = Array.from(array)
modifiedArray .length = modifiedArray .length - 1

console.log(modifiedArray )
> [1, 2, 3]

7
这可能是一种不安全的做法,而且它是否可行取决于JavaScript的实现方式,所以不要使用这种方法。 - ArjixWasTaken

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