从数组中删除最后一项

时间:2013-10-23 14:24:50

标签: javascript arrays slice

我有以下数组。

var arr = [1,0,2];

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

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

28 个答案:

答案 0 :(得分:493)

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

console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]

Documentation of Array.prototype.pop on MDN

答案 1 :(得分:440)

使用splice(index,howmany)

arr.splice(-1,1)

答案 2 :(得分:204)

您可以使用.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作为begin参数,它表示从序列末尾的偏移量。因此,在您的情况下,slice(-1)会提取序列中的最后一个数组元素,即2,就像我们在上面的演示中看到的那样)。

现在,让我们在这里讨论end方法语法中的slice()参数。它也是一个从零开始的索引,从数组中提取结束。所以,假设我们有一个类似的数组: -

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]

如果你只想删除最后一个元素,你不想坐下来&amp;在这里计算最后9个的位置,并像arr.slice(0, 22)那样计算。然后,您可以在此处简单地实现负索引逻辑。做

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

希望它有所帮助!

答案 3 :(得分:41)

通过示例学习:

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

array_1.splice(-1,1)  // output --> [4]      array_1 = [1,2,3]
array_2.slice(0,-1);  // output --> [1,2,3]  array_2 = [1,2,3,4]
array_3.pop();        // output --> 4        array_3 = [1,2,3]

答案 4 :(得分:33)

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

arr = arr.slice(-1);

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

arr.splice(-1, 1);

pop

arr.pop();

答案 5 :(得分:18)

有一个功能,解释here

arr.pop();

答案 6 :(得分:12)

您只需使用arr.pop()

即可

这将删除数组的最后一个条目。

var arr = [1,0,2]; 
var popped = arr.pop();//Now arr = [1,0] & popped = 2

答案 7 :(得分:9)

我认为.pop()是最正确的&#39;但是,有时它可能不起作用,因为你需要使用没有最后一个元素的数组......

在这种情况下,您可能希望使用以下内容,它将返回[1,2,3]

&#13;
&#13;
var arr = [1,2,3,4];
console.log(arr.splice(0,arr.length-1));
&#13;
&#13;
&#13;

.pop()将返回4

&#13;
&#13;
var arr = [1,2,3,4];
console.log(arr.pop());
&#13;
&#13;
&#13;

这可能不合适......

希望这可以节省你一些时间。

答案 8 :(得分:7)

您可以使用splice()以两种方式执行此操作:

  1. arr.splice(-1,1)
  2. arr.splice(arr.length-1,1)
  3. splice(position_to_start_deleting, how_many_data_to_delete)有两个参数。

    position_to_start_deleting:基于零的索引,从哪里开始删除。 how_many_data_to_delete:从指示的索引中,应删除多少连续数据。

    您还可以使用pop()删除最后一个元素,因为pop()会删除某个数组中的最后一个元素。
    使用arr.pop()

答案 9 :(得分:5)

arr.slice(-1)将返回数组最后一个元素的副本,但不会修改原始数组。

要从数组中删除最后n个元素,请使用arr.splice(-n)(注意&#34; p&#34; in&#34; splice&#34;)。返回值将是包含已删除元素的新数组。

更简单,对于n == 1,请使用val = arr.pop()

答案 10 :(得分:5)

//声明数组

var names = [“ harry”,“ aahan”,“ arav”,“ you”];

//此命令将删除names的最后一个元素

names.pop();

答案 11 :(得分:5)

  

此方法更有助于删除和存储的最后一个元素   阵列。

var sampleArray = [1,2,3,4];// Declaring the array
var lastElement = sampleArray.pop();//this command will remove the last element of `sampleArray` and stores in a variable called `lastElement` so that you can use it if required.
  

现在的结果是:

console.log(sampleArray); //This will give you [1,2,3]
console.log(lastElement); //this will give you 4

答案 12 :(得分:4)

var arr = [1,0,2];
arr.length--; 

//删除最后一个元素 //需要检查是否arr.length&gt; 0

答案 13 :(得分:4)

另一种方法是根据索引进行过滤:

arr.filter((element, index) => index < arr.length - 1);

注意:filter()创建一个新数组,不更改现有数组。

答案 14 :(得分:3)

2019 ECMA5解决方案:

const new_arr = arr.reduce((d, i, idx, l) => idx < l.length - 1 ? [...d, i] : d, [])

非破坏性,通用,单线,只需要在阵列末尾复制并粘贴即可。

答案 15 :(得分:3)

值得注意的是slice将返回数组,而.pop().splice()会改变现有< / em> array。

如果您喜欢使用链式命令样式处理数据集合,那么您真的希望坚持slice这样的事情。

例如:

&#13;
&#13;
myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(-1)                       // get rid of the last item
  .map(x => `The number is: ${x}`);// map to a set of strings
&#13;
&#13;
&#13;

由于与mapfilter等不同,你可能需要更多的混乱和变量管理与&#34; pop&#34;做同样的事情,你没有得到新的阵列。

push相同,它会在数组的末尾添加一个项目。使用concat可能会更好,因为这可以让你保持流量。

&#13;
&#13;
myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(-1)                       // get rid of the "10"
  .concat([100])                   // note with concat, you must pass an array
  .map(x => `The number is: ${x}`) // map to a set of strings
  
&#13;
&#13;
&#13;

答案 16 :(得分:3)

splice(index,howmany) - 这个解决方案听起来不错。但是, howmany 仅适用于正数组索引。要删除最后两项或三项,请使用索引本身。

例如,splice(-2)删除最后两项。 splice(-3)用于删除最后三项。

答案 17 :(得分:2)

说你有var arr = [1,0,2]

arr.splice(-1,1)将返回给您array [1,0];,而arr.slice(-1,1)将返回给您array [2];

答案 18 :(得分:2)

仅在您的用例中使用以下内容:

arr.pop()

答案 19 :(得分:1)

使用点差运算符:

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

答案 20 :(得分:1)

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

stack.reverse().shift();

stack.push(0);

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

答案 21 :(得分:1)

var a = [1,2,3,4,5,6]; 
console.log(a.reverse().slice(1).reverse());
//Array(5) [ 1, 2, 3, 4, 5 ]

答案 22 :(得分:1)

使用Lodash,您可以使用dropRight,如果您不想知道删除了哪些元素:

_.dropRight([1, 2, 3])
// => [1, 2]

_.dropRight([1, 2, 3], 2);
// => [1]

答案 23 :(得分:1)

这是删除最后一项的好方法:

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

拼接细节如下:

拼接(startIndex,拼接数量)

答案 24 :(得分:0)

如果要在javascript中从数组末尾删除n个项目,则可以轻松使用:

arr.splice(-n, n);

答案 25 :(得分:0)

我得到了最好的答案!

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

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

老实说,JS 在这一点上是一个模因。

答案 26 :(得分:-1)

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

答案 27 :(得分:-1)

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

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