从数组中移除第一个和最后一个元素

132
如何删除数组中的第一个和最后一个元素?
例如:
var fruits = ["Banana", "Orange", "Apple", "Mango"];

期望输出数组:

["Orange", "Apple"]

10
这似乎是一个用于创建到w3school链接的“软球”,你甚至使用了相同的数组元素。;-) - Myster
15个回答

159
fruits.shift();  // Removes the first element from an array and returns only that element.
fruits.pop();    // Removes the last element from an array and returns only that element. 

查看数组的所有方法。


使用jQuery UI更容易 myArray.effect( "transfer", { item: 'first&&last', to: bin}); - iConnor
4
亲爱的投票者,您可能希望您的投票有所帮助,请添加评论解释回答中的问题。请注意,在解释中不要改变原回答的意思。 - user180100
3
这将仅返回已删除(第一个或最后一个)元素的值,而不是剩余数组。 - Jubin Patel
@RC。只是想告知用户有关函数的实际工作。我对你的答案有疑问。 - Jubin Patel
2
用户使用这个函数就像你写的一样,肯定可以正确地删除元素。但是,如果用户写了 return fruits.shift(),它将仅返回第一个元素并从数组中删除。 - Jubin Patel

114

创建一个一级深度的副本。

fruits.slice(1, -1)

放弃原始数组。

感谢 @Tim 指出拼写错误。


5
我认为你的意思是 slice() 而不是 splice() - Tim Down
89
切水果比弹出或移动水果要好得多。 - pettys
3
随着 Redux、函数式 JavaScript 和不可变对象的日益流行,这个答案更好了。 - nkint
或者使用arr.slice(n, -n)从数组的两端各删除一个数字。 - Reggie Pinkham

26

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var newFruits = fruits.slice(1, -1);
console.log(newFruits); //  ["Orange", "Apple"];

这里,-1表示数组中的最后一个元素,1表示第二个元素。


如果您不需要创建新变量,只需使用fruits = fruits.slice(1,-1); - Hastig Zusammenstellen

9
我使用splice方法。
fruits.splice(0, 1); // Removes first array element

var lastElementIndex = fruits.length-1; // Gets last element index

fruits.splice(lastElementIndex, 1); // Removes last array element

要删除最后一个元素,您也可以这样做:
fruits.splice(-1, 1);

请查看从数组中删除最后一个项目以了解更多评论。


1
如果您要改变数组,不妨使用 shift()pop() - anolan23

5

push()将一个新元素添加到数组的末尾。
pop()从数组的末尾删除一个元素。

unshift()将一个新元素添加到数组的开头。
shift()从数组的开头删除一个元素。

要从数组arr中删除第一个元素,请使用arr.shift()
要从数组arr中删除最后一个元素,请使用arr.pop()


2
你可以使用 Array.prototype.reduce()
代码:

const fruits = ['Banana', 'Orange', 'Apple', 'Mango'],
      result = fruits.reduce((a, c, i, array) => 0 === i || array.length - 1 === i ? a : [...a, c], []);

console.log(result);


很酷的是,使用reduce函数可以轻松移除第一个和最后一个项目! - Mohan Ram

2
为了避免改变源数组和出现深层次的错误,ReactJS开发人员不能使用popshift函数。最好的方法是使用JavaScript内置函数slice。这个函数可以创建源数组的一个片段并返回一个新的数组,它还接受负数索引,意味着第一个负数是数组中最后一个元素。因此:
fruits.slice(a, b)
  • 第一个参数表示从索引a开始,不包括索引a-1。
  • 第二个参数表示在索引b-1结束切片,并且不包括索引b。

因此,根据以上解释,如果我们将a = 1,则表示我们不需要第一个元素;如果我们将b = latest,则表示切片将在索引b-1结束,并且我们不需要索引b。

: slice函数中最后一个元素的索引是什么?答案是正确的:-1。

✅ 因此,最终答案是:

fruits.slice(1, -1)

2
这可以使用lodash的_.tail_.dropRight函数来实现:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(_.dropRight(_.tail(fruits)));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>


1
从数组中删除元素很简单,只需执行以下操作。
let array_splited = [].split('/');
array_splited.pop()
array_splited.join('/')

0
我查看了所有值得注意的答案,现在给你指出一个不同的答案。这个方法对我有效,希望它也能帮到你。
fruits.slice(1,fruits.length-1)

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