배열에서 마지막 항목 제거


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이며 마지막 요소 34입니다. 위치 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.