从数组中删除最后一项

IT技术 javascript arrays slice
2021-01-14 21:29:32

我有以下数组。

var arr = [1,0,2];

我想删除最后一个元素,即 2。

我使用过,arr.slice(-1);但它不会删除该值。

6个回答

Array.prototype.pop() 按照JavaScript 约定。

let fruit = ['apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();

console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]
使用 pop() 时,请确保不要执行 jQuery('#foo').val(numbers.pop()),除非您只想将数组的最后一项放入字段中。pop() 返回移除的元素。正如斯图尔特所做的那样,首先做 numbers.pop(); 然后做 jQuery('#foo').val(numbers)...
2021-03-19 21:29:32
@nayiaw 是的,ES6 传播语法:let fruit = ['apple', 'orange', 'banana', 'tomato']; let popped = [...fruit].pop(); popped then equalstomatoFruit still equals ['apple', 'orange', 'banana', 'tomato']
2021-03-23 21:29:32
Array.prototype.pop() 似乎是最快的jsperf.com/slice-vs-splice-vs-pop/3
2021-04-02 21:29:32
有什么方法可以在保持数组不变的同时做到这一点?
2021-04-02 21:29:32
让 unpop() 返回数组的其余部分会很酷。
2021-04-04 21:29:32

使用splice(startPosition, deleteCount)

array.splice(-1)

Pop 本身只会返回最后一个元素的值。如果我理解正确,@PrithvirajMitra 想要两件事:1) 从原始数组中删除最后一个元素,以及 2) 将该元素作为单个元素数组返回 - 即:[0,1,2] -> [2],留下[0,1]. 如果是这样的话,那么[arr.pop()]将做的伎俩。
2021-03-23 21:29:32
请注意,array.pop()将更改 modify array,而slice(0, -1)不会。Pop当然更快,但可能并不总是适合所有需求。
2021-03-24 21:29:32
@PrithvirajMitra 你想删除 1 和 0 吗?所以数组 ==[2] ?
2021-03-30 21:29:32
这不是最好的解决方案,最好的是弹出功能。不是这个。
2021-03-31 21:29:32
不适用于单元素数组:[1].splice(-1, 1)=>[1]
2021-04-01 21:29:32

您可以使用以下.slice()方法执行此操作

arr.slice(0, -1);    // returns [1,0]

这是一个演示:

var arr = [1, 0, 2];
var newArr = arr.slice(0, -1);    // returns [1,0]

console.log(newArr);
$('#div1').text('[' + arr + ']');
$('#div2').text('[' + newArr + ']');
<script src="http://code.jquery.com/jquery.min.js"></script>
<b>Original Array    : </b>
<div id="div1"></div>
<br/>
<b>After slice(0, -1): </b>
<div id="div2"></div>

而不是做:

arr.slice(-1);   // returns [2]

这是一个演示:

var arr = [1, 0, 2];
var newArr = arr.slice(-1);    // returns [2]

console.log(newArr);
$('#div1').text('[' + arr + ']');
$('#div2').text('[' + newArr + ']');
<script src="http://code.jquery.com/jquery.min.js"></script>
<b>Original Array    : </b>
<div id="div1"></div>
<br/>
<b>After slice(-1): </b>
<div id="div2"></div>

解释:-

现在Array.prototype.slice()或简而言之slice()方法的基本语法是:

arr.slice([begin[, end]])

这里,

begin参数是从零开始从数组中提取的索引。所以,让我们根据上面的例子说,如果我们做类似的事情

arr.slice(0)    // returns [1,0,2]

它将从位置 0 的序列开始返回所有数组元素,即[1,0,2]. 类似地,如果我们这样做

arr.slice(1)    // returns [0,2]

它会返回,[0,2]因为 0 位于此处的位置 1 以及之后的所有位置。现在,在您的情况下,您传递了一个负索引,即-1作为开始参数,它表示距序列末尾的偏移量。因此,slice(-1)在您的情况下,提取序列中的最后一个数组元素,即2正如我们在上面的演示中已经看到的那样)。

现在,让我们endslice()这里谈谈方法语法中参数它又是一个从零开始的索引,在该索引处从数组中提取结束。所以,假设我们有一个数组,如:-

var arr = [1, 0, 2, 5, 3, 9];

我们只想获取2,5,3数组中元素。现在,2从序列开始的位置2,对于最后一个元素,3它是4我们需要在位置 5 处结束提取,因为我们需要在该位置之前获取元素。所以,我们将slice()在这里简单地实现方法,如

arr.slice(2, 5)    // returns [2,5,3]

在你的情况下,我们已经实现-1为结束参数,所以我们的代码就像

arr.slice(0, -1)   // returns [1,0]

作为负索引,end表示距序列末尾的偏移量。因此,slice(0,-1)通过序列中的倒数第二个元素提取第一个元素。所以,我们得到了想要的输出。我们也可以像

arr.slice(0, 2)    // returns [1,0]

我们将得到相同的输出。但是,我在-1这里使用它是因为即使对于像这样的长数组也更容易实现

[0,2,3,1,2,9,3,6,3,9,1,0,2,9,0,1,1,2,3,4,7,9,1]

如果你只想删除最后一个元素,你不想坐在这里计算最后 9 的位置,然后做 like arr.slice(0, 22)然后你可以在这里简单地实现负索引逻辑并做

arr.slice(0, -1) // same result as arr.slice(0, 22)

希望能帮助到你!

问题的示例代码隐含地询问如何获取一个新数组,其中从原始数组中删除了最后一个值。arr.slice(0, -1)最佳答案也是如此
2021-03-15 21:29:32
slice 更好,因为它不会修改原始数组
2021-03-26 21:29:32
这很好用,只要确保您注意到这是对 .slice() 的调用,而不是对 .s p lice() 的调用
2021-04-06 21:29:32
应该注意的是,此解决方案不会从数组中删除最后一项,arr而是返回一个排除最后一项的新数组。正如 Mozilla 的文档所说:“slice() 方法将数组的一部分的浅拷贝返回到新的数组对象中。”。
2021-04-08 21:29:32

通过例子学习:

let array_1 = [1,2,3,4];
let array_2 = [1,2,3,4];
let array_3 = [1,2,3,4];
let array_4 = [1,2,3,4];

array_1.splice(-1,1)  // returned --> [4]      array_1 = [1,2,3]
array_2.slice(0,-1);  // returned --> [1,2,3]  array_2 = [1,2,3,4]
array_3.pop();        // returned --> 4        array_3 = [1,2,3]
array_4.shift();      // returned --> 1        array_4 = [2,3,4]
最完整的答案👌 谢谢大佬!
2021-03-22 21:29:32
@RaisingAgent 感谢您注意到这些事情:)
2021-03-24 21:29:32
这应该是公认的答案,因为它说明了最容易出错的地方。> 返回您想要的数组以您想要的方式改变数组。
2021-04-11 21:29:32

您需要这样做,因为slice不会改变原始数组。

arr = arr.slice(-1);

如果要更改原始数组,可以使用splice

arr.splice(-1, 1);

pop

arr.pop();
使用arr = arr.slice(0, -1);代替arr = arr.slice(-1);
2021-03-25 21:29:32