Удалить последний элемент из массива
у меня есть следующий массив.
var arr = [1,0,2];
Я хотел бы удалить последний элемент, т. е. 2.
Я arr.slice(-1);
но он не удаляет значение.
18 ответов
let fruit = ['apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();
console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]
вы можете сделать это с помощью .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
(как мы уже видели в приведенном выше демо).
теперь давайте поговорим о на 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
в качестве параметра end, поэтому наш код похож на
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)
. Тогда вы можете просто реализуйте логику отрицательного индекса здесь & do
arr.slice(0, -1) // same result as arr.slice(0, 22)
надеюсь, это поможет!
вам нужно будет сделать это, так как slice
не изменяет исходный массив.
arr = arr.slice(-1);
если вы хотите изменить исходный массив, вы можете использовать splice
:
arr.splice(-1, 1);
или pop
:
arr.pop();
учатся на примере:
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]
Вы можете просто использовать,arr.pop()
Это удаляет последний элемент массива.
var arr = [1,0,2];
var popped = arr.pop();//Now arr = [1,0] & popped = 2
arr.slice(-1)
вернет скопировать последнего элемента массива, но оставляет исходный массив без изменений.
удалить последний n
элементы из массива, используйте arr.splice(-n)
(обратите внимание на "p "в"splice"). Возвращаемым значением будет новый массив, содержащий удаленные элементы.
еще проще, для n == 1
используйте val = arr.pop()
var arr = [1,0,2];
arr.length--;
// удаляет последний элемент // нужно проверить, если arr.длина > 0
этот метод более полезен для удаления и хранения последнего элемента матрица.
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
Я считаю .pop()
чтобы быть наиболее "правильным" решением, однако иногда это может не работать, так как вам нужно использовать массив без последнего элемента прямо там...
в таком случае вы можете использовать следующие
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());
что может быть нежелательно...
надеюсь, это сэкономит вам время.
splice (index,howmany) - это решение звучит хорошо. Но Это!--1-->howmany будет работать только для положительного индекса массива. Чтобы удалить последние два или три элемента, используйте сам индекс.
например, сращивание (-2) для удаления последних двух элементов. соединения(-3) для удаления последних трех пунктов.
стоит отметить, что 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
вы можете сделать это двумя способами с помощью splice()
:
-
arr.splice(-1,1)
-
arr.splice(arr.length-1,1)
splice(position_to_start_deleting, how_many_data_to_delete)
принимает два параметра.
position_to_start_deleting
: индекс на основе нуля, откуда начать удаление.
how_many_data_to_delete
: из указанного индекса, сколько последовательных данных должно быть удалено.
вы также можете удалить последний элемент, используя pop()
as pop()
удаляет последний элемент из некоторого массива.
Использовать arr.pop()
скажите, что у вас есть var arr = [1,0,2]
arr.splice(-1,1)
вернутся к вам array [1,0];
пока arr.slice(-1,1)
вернутся к вам array [2];
это хороший способ удалить последний элемент:
if (arr != null && arr != undefined && arr.length > 0) {
arr.splice(arr.length - 1, 1);
}
деталь соединения следующим образом:
соединение (startIndex, количество соединений)
var stack = [1,2,3,4,5,6];
stack.reverse().shift();
stack.push(0);
выход будет: массив[0,1,2,3,4,5]. Это позволит вам сохранить то же количество элементов массива, что и при вводе нового значения.
С Lodash вы можете использовать dropRight, Если вы не хотите знать, какие элементы были удалены:
_.dropRight([1, 2, 3])
// => [1, 2]
_.dropRight([1, 2, 3], 2);
// => [1]