620

次の配列があります。

var arr = [1,0,2];

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

使用arr.slice(-1);しましたが、値は削除されません。

4

27 に答える 27

807

JavaScript 規約によるArray.prototype.pop() 。

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

console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]
于 2013-10-23T14:26:08.820 に答える
660

splice(startPosition, deleteCount)を使用する

array.splice(-1)

var array = ['abc','def','ghi','123'];
var removed = array.splice(-1);  //last item
console.log( 'array:', array );
console.log( 'removed:', removed );

于 2013-10-23T14:25:42.623 に答える
358

.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()orの基本的な構文は次のとおり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)あなたの場合、シーケンス内の最後の 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]

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

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)

それが役に立てば幸い!

于 2013-10-23T14:27:38.790 に答える
149

例によって学ぶ:

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]
于 2016-12-30T13:14:08.047 に答える
67

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

arr = arr.slice(0, -1);

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

arr.splice(-1, 1);

またはpop:

arr.pop();
于 2013-10-23T14:25:38.893 に答える
19

そのための機能があります。ここに説明があります:

arr.pop();
于 2013-10-23T14:26:15.530 に答える
14

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

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

var arr = [1,0,2]; 
var popped = arr.pop();//Now arr = [1,0] & popped = 2
于 2013-10-23T14:26:38.453 に答える
11

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

チェーン コマンド スタイルでデータのコレクションを処理するのが好きな場合は、このようなものに固執したいと思うでしょうslice

例えば:

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

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(0, -1)                       // get rid of the last item ! slice(-1) will give first element
  .map(x => `The number is: ${x}`);// map to a set of strings

map、などとは異なり、filter新しい配列が返されないため、「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
  

于 2016-12-05T13:00:50.157 に答える
10

arr.slice(-1)配列の最後の要素のコピーを返しますが、元の配列は変更されません。

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

さらに簡単に、n == 1、使用val = arr.pop()

于 2013-10-23T14:28:39.030 に答える
6

別のアプローチは、インデックスに基づいてフィルタリングすることです。

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

注:filter()新しい配列を作成し、既存の配列を変更しません。

于 2020-03-19T00:27:49.753 に答える
6

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

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
于 2016-11-15T14:01:29.837 に答える
5

splice(index,howmany) - このソリューションは良さそうです。しかし、このhownumberは、正の配列インデックスに対してのみ機能します。最後の 2 つまたは 3 つのアイテムを削除するには、インデックス自体を使用します。

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

于 2014-10-27T05:54:11.927 に答える
5
var arr = [1,0,2];
arr.length--; 

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

于 2016-08-02T06:35:34.257 に答える
4

Lodashでは、削除された要素を知りたくない場合は、dropRightを使用できます。

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

_.dropRight([1, 2, 3], 2);
// => [1]
于 2017-08-27T05:48:17.227 に答える
2

あなたが持っていると言うvar arr = [1,0,2]

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

于 2015-05-14T03:52:19.153 に答える
1

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

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

次のようにスプライスの詳細:

splice(startIndex, スプライス数)

于 2016-10-12T08:51:43.643 に答える
1

スプレッド演算子の使用:

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

于 2020-07-11T11:38:36.273 に答える
1
var stack = [1,2,3,4,5,6];

stack.reverse().shift();

stack.push(0);

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

于 2017-02-20T01:21:54.463 に答える