web-dev-qa-db-ja.com

配列から最後の項目を削除

私は以下の配列を持っています。

var arr = [1,0,2];

最後の要素、つまり2を削除します。

私はarr.slice(-1);を使いましたが、それは値を削除しません。

336
435
Anton
let fruit = ['Apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();

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

MDNに関するArray.prototype.popのドキュメント /

488
Stuart Kershaw

これを行うには、 .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パラメータは、配列からの抽出が始まる0から始まるインデックスです。なので、上の例に基づいて次のようにしてみましょう。

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

これは、位置0からシーケンスの先頭までのすべての配列要素を返します。それは[1,0,2]です。同様に、

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

ここでは0が1の位置にあり、それ以降はすべて1であるため、[0,2]を返します。さて、あなたのケースでは、負のインデックス、つまり-1をbeginパラメータとして渡しました。これはシーケンスの最後からのオフセットを示しています。したがって、あなたの場合のslice(-1)はシーケンスの最後の1つの配列要素を抽出します。それは2_です(上のdemoで既に見たように)。

それでは、ここでslice()メソッド構文のendパラメータについて話しましょう。これもまた、配列からの抽出が終了する0から始まるインデックスです。それでは、次のような配列があるとしましょう。

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]

あなたの場合、私たちはendパラメータとして-1を実装したので、私たちのコードは以下のようになります。

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

負のインデックスとして、endはシーケンスの末尾からのオフセットを示します。そのため、slice(0,-1)は、シーケンス内の最初の要素から最後から2番目の要素までを抽出します。だから、私たちは希望の出力を得ます。私達はまた好むことができます

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の位置を計算して計算したくないので、arr.slice(0, 22)のようにします。その後、ここで負のインデックスロジックを簡単に実装できます。

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

それが役に立てば幸い!

203
palaѕн

例で学ぶ:

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]
40
Lukas

sliceは元の配列を変更しないため、これを実行する必要があります。

arr = arr.slice(-1);

元の配列を変更したい場合はspliceを使用できます。

arr.splice(-1, 1);

またはpop

arr.pop();
33
Bill Criswell

そのための機能があります、説明 ここ

arr.pop();
18
JoDev

あなたは単に使うことができます、arr.pop()

これにより、配列の最後のエントリが削除されます。

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

私は.pop()を最も「正しい」解決策であると考えますが、最後の要素なしでarrayを使用する必要があるため、うまくいかない場合もあります。

そのような場合、あなたは以下を使いたいかもしれません、それは[1,2,3]を返します

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

.pop()4を返します。

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

これは望ましくないかもしれません...

これが時間を節約することを願っています。

8

splice()を使用して2つの方法でそれをすることができます:

  1. arr.splice(-1,1)
  2. arr.splice(arr.length-1,1)

splice(position_to_start_deleting, how_many_data_to_delete)は2つのパラメータを取ります。

position_to_start_deleting:削除を開始する位置からの0から始まるインデックス。 how_many_data_to_delete:指定されたインデックスから、いくつの連続データを削除する必要があるか。

pop()は配列から最後の要素を削除するので、pop()を使用して最後の要素を削除することもできます。
arr.pop()を使う

7
Harunur Rashid

このメソッドは、配列の最後の要素を削除して保存するのに役立ちます。

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
5
razat naik

arr.slice(-1)は、配列の最後の要素の copy を返しますが、元の配列は変更されないままになります。

配列から最後のn要素を削除するには、arr.splice(-n)を使います( "splice"の "p"に注意してください)。戻り値は、削除された要素を含む新しい配列になります。

もっと簡単です、n == 1にはval = arr.pop()を使います。

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

//最後の要素を削除する// arr.length> 0かどうかを確認する必要がある

4
Nirav Shah

sliceは両方とも new 配列を返すのに対して、.pop().splice() existing 配列を変更することに注意してください。

一連のデータを連鎖したコマンドスタイルで扱うのが好きなら、sliceを使い続けたいと思うでしょう。

例えば:

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

mapfilterなどとは違って、新しい配列を返さないので、 "pop"で同じことをするにはもっと面倒なことや変数管理が必要になるかもしれません。

これはPushと同じ種類のもので、これは配列の最後に項目を追加します。 concatを使ったほうがいいかもしれません。それはフローを継続させるためです。

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
  
3
pete otaqui

splice(index、howmany) - この解決策はいいですね。しかしこれ howmany は正の配列インデックスに対してのみ機能します。最後の2項目または3項目を削除するには、インデックス自体を使用します。

たとえば、最後の2つの項目を削除するにはsplice(-2)を使用します。最後の3項目を削除するためのsplice(-3)。

3
Parthyz

var arr = [1,0,2]があると言います

arr.splice(-1,1)はあなたに戻りますarray [1,0];arr.slice(-1,1)はあなたに戻りますarray [2];

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

stack.reverse().shift();

stack.Push(0);

出力は Array [0,1,2,3,4,5] になります。これにより、新しい値をプッシュインするのと同じ数の配列要素を保持できます。

1
Blackspade

Lodashでは、どの要素が削除されたかわからない場合は dropRight を使用できます。

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

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

これは最後のアイテムを削除するのに良い方法です:

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

以下のようにスプライスの詳細:

splice(startIndex、スプライス数)

1