从数组中删除最后一项(而不是返回项)

Posted

技术标签:

【中文标题】从数组中删除最后一项(而不是返回项)【英文标题】:Remove the last item from an array (and not return item) 【发布时间】:2013-12-16 18:44:55 【问题描述】:

我当前的数组:abc = ['a', 'b', 'c', 'd'];

我理解.pop() 删除并返回数组的最后一项,因此:abc.pop(); = 'd'

但是,我想删除最后一项,然后返回数组。所以它会返回:

['a', 'b', 'c'];

有这方面的 javascript 函数吗?

【问题讨论】:

Remove last item from array的可能重复 【参考方案1】:

pop() 函数还从数组中删除最后一个元素,所以这就是你想要的(Demo on JSFiddle):

var abc = ['a', 'b', 'c', 'd'];
abc.pop()
alert(abc); // a, b, c

【讨论】:

请注意,代码的可读性与其占用的行数或更多行数一样重要。【参考方案2】:

这样做

abc = abc.splice(0, abc.length-1)

编辑:已经指出这实际上返回了一个新数组(尽管具有相同的变量名)。

如果要返回相同的数组,则必须创建自己的函数

function popper(arr) 
   arr.pop();
   return arr;

【讨论】:

从技术上讲,您返回的是一个新数组,而不是原始数组。在某些情况下,这可能会导致问题。【参考方案3】:

在表达式中,使用逗号运算符。 (文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator//感谢@Zero)

(abc.length--, abc)    

// expl :
  (abc.length--, abc).sort();

或者在一个函数中,最方便的是将它设置在数组原型上:

 Array.prototype.removeLast = function () 
       this.length--;
       return this;
 

调用

var abc = ['you', 'and', 'me'];
abc.removeLast(); 

你可以菊花链:

abc.removeLast().sort();

【讨论】:

添加了加号,因为与我要建议的方法相同。但是,comma operator 文档的链接也可以作为答案,因为读者不知道它是如何工作的——代码中的解释是不够的,IMVHO。【参考方案4】:
Array.prototype.popAndReturnArray = function( )
   this.pop();
   return this;

【讨论】:

【参考方案5】:

是的,你想要的更普遍的是“过滤”功能。

它接受一个函数并返回通过测试函数的所有内容,这是一个示例:

abc = ['a', 'b', 'c', 'd'];

abc.filter(function(member,index)  return index !== abc.length - 1; );

【讨论】:

【参考方案6】:

Splice 和 pop 都会返回被移除的元素。它们会改变原始数组,但如果您正在寻找一个返回数组而不删除元素的函数,请使用 slice。这样您就可以链接调用。

let abc = ['a', 'b', 'c', 'd'];
abc = abc.slice(0, -1)
  .map(value => value += value);
console.log(abc);
// prints ['aa', 'bb', 'cc']

【讨论】:

以上是关于从数组中删除最后一项(而不是返回项)的主要内容,如果未能解决你的问题,请参考以下文章

ES5数组操作

NodeJS - 从数组中减去数组,而不是删除所有重复项[重复]

?数组首尾操作的方法

数组常用的方法和返回值

数组常用的方法

数组常用的几种方法