배열에서 마지막 항목 제거


441

다음 배열이 있습니다.

var arr = [1,0,2];

마지막 요소 즉 2를 제거하고 싶습니다.

사용 arr.slice(-1);했지만 값을 제거하지는 않습니다.




3
arr.splice (-1,1)은 배열 [1,0]으로 돌아갑니다. arr.slice (-1,1)이 당신에게 돌아옵니다 [2]
— Anja Ishmukhametova

10
arr.slice(0,-1)나를 위해 최고의 솔루션이었다
— 블랙 맘바

3
"마지막 요소 제거"는 배열에서 요소를 제거하고 배열을 유지하는 것을 의미하기 때문에 약간 모호합니다. 그러나 요소를 제거하고 유지하는 것도 의미 할 수 있습니다. 첫 번째 경우 : splice(), 두 번째 경우 : pop().
— thoni56

답변:


517

스플 라이스 사용 (인덱스, howmany)

arr.splice(-1,1)

1
@PrithvirajMitra 1과 0을 제거 하시겠습니까? 따라서 배열 == [2]?
— Anton

3
단일 요소 배열에는 작동하지 않습니다 : [1].splice(-1, 1)=>[1]
— Tvaroh

135
이것은 최선의 해결책이 아니며, 최고는 팝 기능입니다. 이거 말고.
— Tommix

6
팝 자체는 마지막 요소의 값만 반환합니다. : 예 - 단일 요소 배열로 해당 요소를 반환) 원래의 배열에서 마지막 요소를 제거하려면 1), 2 : 만약 내가 제대로 이해하고, @PrithvirajMitra 두 가지를 원한다 [0,1,2] -> [2]뒤에 남겨두고 [0,1]. 이 경우 [arr.pop()]트릭을 수행합니다.
— 벤 헐

11
참고 array.pop()수정 변경됩니다 array동안 slice(0, -1)하지 않습니다. 팝은 물론 빠르지 만 모든 요구에 항상 적합한 것은 아닙니다.
— adelriosantiago

621

JavaScript 규칙에 따른 Array.prototype.pop ()

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

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

7
Array.prototype.pop ()은 가장 빠른 jsperf.com/slice-vs-splice-vs-pop/3 인
— Daniel

1
pop ()을 사용할 때 배열의 마지막 항목 만 필드에 배치하지 않는 한 jQuery ( '# foo'). val (numbers.pop ())을 수행하지 마십시오. pop ()은 제거 된 요소를 반환합니다. 스튜어트가 한 것처럼, 먼저 numbers.pop (); jQuery ( '# foo'). val (numbers) ...
— Charles Robertson

4
최상의 솔루션 +1
— mdlars

2
배열의 나머지를 반환하는 unpop ()을 갖는 것이 좋습니다.
— eomeroff

2
배열을 변경하지 않고 유지하는 방법은 무엇입니까?
— nayiaw

263

다음 .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,2]0이 1 위치에 있고 그 이후의 모든 것이 있기 때문에 반환 됩니다. 이제는 -1시퀀스의 끝에서 오프셋을 나타내는 시작 매개 변수로 음수 인덱스를 전달했습니다 . 따라서 slice(-1)귀하의 경우 시퀀스에서 마지막 하나의 배열 요소를 추출합니다 2( 위의 데모에서 이미 본 것처럼 ).

이제 메소드 구문에서 end매개 변수에 대해 이야기 slice()하겠습니다. 다시 배열에서 추출이 끝나는 인덱스 (0부터 시작)입니다. 따라서 다음과 같은 배열이 있다고 가정 해 봅시다.

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

2,5,3배열 의 요소 만 가져 오려고합니다 . 이제 2시퀀스의 시작 위치 는 2이며 마지막 요소 3는 4입니다. 위치 5 이전에 요소를 가져와야하기 때문에 여기서 위치 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의 위치를 ​​지정하고 계산하고 싶지 않습니다 arr.slice(0, 22). 그런 다음 여기에서 음의 색인 논리를 간단히 구현할 수 있습니다.

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

그것이 도움이되기를 바랍니다!


11
이것은 잘 작동합니다. 이것이 .s p lice ()가 아닌 .slice ()에 대한 호출임을 확인하십시오 .
— Brian Hasden

4
이 솔루션 은 배열에서 마지막 항목을 제거하지 않고 마지막 항목 arr을 제외하는 새 배열을 반환합니다. 모질라의 문서에 따르면 : "slice () 메소드는 배열의 일부분에 대한 얕은 사본을 새로운 배열 객체로 반환합니다."
— F Lekschas

4
질문의 샘플 코드는 원래 배열에서 마지막 값을 제거한 새로운 배열을 얻는 방법을 암시 적으로 묻습니다. 그래서 arr.slice(0, -1)가장 좋은 대답이다.
— Tsounabe

4
슬라이스는 원래 배열을 수정하지 않기 때문에 더 좋습니다
— user365314

66

예를 들어 배우십시오 :

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]

13
가장 잘못 되는 부분을 보여주기 때문에 허용되는 답변이어야합니다 . > 원하는 배열을 반환 또는 당신이 원하는 방법으로 배열을 돌연변이.
— RaisingAgent

1
@RaisingAgent 다음에 주목 해 주셔서 감사합니다. :)
— Lukas Liesis

43

slice원래 배열을 변경하지 않으므로이 작업을 수행해야합니다 .

arr = arr.slice(-1);

원래 배열을 변경하려면 다음을 사용할 수 있습니다 splice.

arr.splice(-1, 1);

또는 pop:

arr.pop();

22

.pop()가장 '올바른'솔루션 이라고 생각 하지만 마지막 요소가 없으면 배열을 사용해야하기 때문에 때로는 작동하지 않을 수 있습니다 ...

이 경우 다음을 사용하고 싶을 수도 있습니다. [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());

바람직하지 않을 수도 있습니다 ...

시간이 절약되기를 바랍니다.


1
고마워 친구, 이것은 내가 사용해야하는 정확한 예입니다. 고맙습니다 :)
— Barry Michael Doyle

2
이것이 가장 정답입니다. 그 수치는 다른 사람들이 더 높은 순위에 올랐습니다.
— mmla


12

간단하게 사용할 수 있습니다. arr.pop()

그러면 어레이의 마지막 항목이 제거됩니다.

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

8

유스 케이스에 다음을 사용하십시오.

var arr = [1,2,3,4];
arr.pop() //returns 4 as the value
arr // value 4 is removed from the **arr** array variable

그냥 참고하십시오. pop()행이 팝된 항목을 반환하더라도 함수 를 실행 하면 원래 배열이 적용되고 팝된 요소가 제거됩니다.


7

다음을 사용하여 두 가지 방법으로 할 수 있습니다 splice().

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

splice(position_to_start_deleting, how_many_data_to_delete) 두 개의 매개 변수를 사용합니다.

position_to_start_deleting: 삭제를 시작하는 0부터 시작하는 색인입니다. how_many_data_to_delete: 표시된 인덱스에서 몇 개의 연속 데이터를 삭제해야합니까.

pop()as pop()를 사용하여 마지막 요소를 일부 배열에서 제거 할 수도 있습니다 .
사용하다arr.pop()


6

arr.slice(-1)배열의 마지막 요소의 복사본 을 반환 하지만 원래 배열은 수정하지 않습니다.

n배열에서 마지막 요소 를 제거하려면arr.splice(-n) ( "splice"의 "p"참고). 반환 값은 제거 된 요소를 포함하는 새로운 배열입니다.

더 간단하면서도 n == 1사용val = arr.pop()


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

// 마지막 요소를 제거합니다. // arr.length> 0인지 확인해야합니다.


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

이 답변과 어떻게 다릅니 까?
— mpaskov

그렇습니다. 그러나 이것은 더 정교합니다. 초보자에게는 답을 이해하기 어렵습니다.
— razat naik

4

그 지적이의 가치는 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(-1)                       // get rid of the last item
  .map(x => `The number is: ${x}`);// map to a set of strings

"pop"으로 같은 종류의 작업을 수행하려면 훨씬 더 혼란스럽고 변수 관리가 필요할 수 있습니다 map.filter 등, 새로운 배열 등을하지 않습니다.

와 같은 종류이며 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

splice (index, howmany)-이 솔루션은 좋은 소리입니다. 그러나이 howmany 는 양의 배열 인덱스에서만 작동합니다. 마지막 두 항목 또는 세 항목을 제거하려면 색인 자체를 사용하십시오.

예를 들어 splice (-2)는 마지막 두 항목을 제거합니다. 마지막 세 항목을 제거하기위한 splice (-3).


3

Lodash하면 사용할 수 있습니다 dropRight을 당신이 제거 된 요소를 알고 상관하지 않는 경우 :

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

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

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

이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
— Vasilisa

3

2019 ECMA5 솔루션 :

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

비파괴 적이며 일반적인 단일 라이너이며 어레이 끝에 복사 및 붙여 넣기 만하면됩니다.


1
'비파괴 적'은 원래 질문이 원하는 것 같지 않습니다 I would like to remove the last element . 원래 배열에서 파괴적 / 돌연변이 작업이 필요합니다.
— Ben Hull

2

당신이 있다고 말해 var arr = [1,0,2]

arr.splice(-1,1)당신에게 돌아 오는 array [1,0];동안 당신 arr.slice(-1,1)에게 돌아올 것입니다array [2];


1

마지막 항목을 제거하는 좋은 방법입니다.

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

다음과 같은 스플 라이스의 세부 사항 :

접속 (startIndex, 접속 수)


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

stack.reverse().shift();

stack.push(0);

출력은 Array [0,1,2,3,4,5] 입니다. 이를 통해 새로운 값을 입력 할 때와 동일한 양의 배열 요소를 유지할 수 있습니다.


교대 후 또는 올바른 주문을 다시 받으려면 푸시 후 또 다른 역전이 필요합니다
— cyptus

반전 원래 배열을 반대로합니다. 나를 잡았다 ... 한두 번 말해 보자 ...
— Simon_Weaver

1

또 다른 방법은 색인을 기준으로 필터링하는 것입니다.

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

참고 : filter()새로운 배열을 생성하고 기존 배열을 변경하지 않습니다.


0

javascript의 배열 끝에서 n 개의 항목을 제거하려면 다음을 쉽게 사용할 수 있습니다.

arr.splice(-n, n);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.