从数组中删除第一个元素并返回减去第一个元素的数组。

199
抱歉,我无法提供您所需的服务。我的能力范围仅限于用英语回答一些问题和提供相关信息。
var myarray = ["item 1", "item 2", "item 3", "item 4"];

//removes the first element of the array, and returns that element.
alert(myarray.shift());
//alerts "item 1"

//removes the last element of the array, and returns that element.
alert(myarray.pop());
//alerts "item 4"
如何移除第一个数组元素,但返回除第一个元素外的其余数组元素。
在我的示例中,当我删除第一个元素时,应该得到“项2”,“项3”,“项4”。

16
alert(array.slice(1)) 的意思是:弹出一个包含原数组第二个元素到最后一个元素的新数组。array.shift(); alert(array); 的意思是:从数组中移除第一个元素并弹出剩下的数组。 - Thomas
6
当我使用 myarray.shift() 时,返回的是 "item 1" ,但我希望返回的是 "item 2", "item 3", "item 4"。请帮我翻译这句话。 - Brownman Revival
2
如果您需要创建一个没有第一个元素的新数组,则可以使用slice。 - Arnial
8
再添加一个方式来解构数组:[,...myarray] = myarray; - Me.Name
var arr = [1,2,3]; var exceptLast = arr.reverse().slice(1).reverse(); // not an efficient solution - Dave Ankin
显示剩余4条评论
9个回答

271

这将删除第一个元素,然后您可以返回其余的:

var myarray = ["item 1", "item 2", "item 3", "item 4"];
    
myarray.shift();
alert(myarray);

像其他人建议的那样,您也可以使用slice(1);

var myarray = ["item 1", "item 2", "item 3", "item 4"];
  
alert(myarray.slice(1));


66
请注意,slice(1)并没有从数组中“删除第一个元素”。相反,它创建了一个新的数组,并将原来数组的除第一个元素外的所有值进行浅拷贝。 - T.J. Crowder
2
如果你有一个数组的数组,使用slice(1)非常有用。 - Flummox - don't be evil SE

96

为什么不使用ES6?

 var myarray = ["item 1", "item 2", "item 3", "item 4"];
 const [, ...rest] = myarray;
 console.log(rest)


我喜欢这个想法,只是首先它将成为一个未使用的常量。 - giovannipds
10
可以使用 const [,...rest] = myarray 来解决这个问题。=O =D - giovannipds
6
喜欢这个代码的原因是它没有修改原始数组的引用,并且让代码审核者感到困惑¯_(ツ)_/¯。 - tbarbot
这个怎么工作的,先生? - Vivek Rahul

7

试试这个

    var myarray = ["item 1", "item 2", "item 3", "item 4"];

    //removes the first element of the array, and returns that element apart from item 1.
    myarray.shift(); 
    console.log(myarray); 

1
你试过这个吗?看看我更新后的问题,其中包含代码片段,它将返回“item 1”。 - Brownman Revival

4

4
可以使用 lodash 的 _.tail 方法在一行代码中实现此操作。

var arr = ["item 1", "item 2", "item 3", "item 4"];
console.log(_.tail(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>


4

array = [1,2,3,4,5,6,7,8,9];

array2 = array.slice(1,array.length); //arrayExceptfirstValue

console.log(array2);

我浏览了所有值得注意的答案,但我想提供一种不同的解决方案。这个方法对我很有效,希望能对你有所帮助。

array.slice(1,array.length)

0
按索引过滤。这不会修改数组。

var myarray = ["item 1", "item 2", "item 3", "item 4"];

console.log(myarray.filter((_, i) => i !== 0))


0

我能想到的最简单的方法是:

const myarray = ["item 1", "item 2", "item 3", "item 4"];
const [, ...arrayYouNeed] = myarray;
console.log(arrayYouNeed);

原始的array不会被改变,您可以在需要的任何地方使用arrayYouNeed

如果您想知道它是如何工作的,请查阅“分解数组”!


-3
你可以使用array.slice(0,1) // 删除第一个索引并返回数组。

3
首个索引不被删除,将创建一个不包含第一个元素的副本。原始数组未被修改。 - Emaborsa
1
另外,slice(0,1)将返回一个仅包含第一项的数组。相反,您需要调用slice(1)以获取一个包含除第一项之外的所有项的数组,就像接受的答案中所示。 - schellmax
你可能是指的array.splice(0,1),而不是"slice"。注意字母 "p"。顺便说一下,我认为这是 JavaScript 中一个糟糕的命名约定,两个方法只有一个字母的差别,而且两个方法给出的结果正好相反。 - vir us

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