Удалить элемент из массива (сращивание)
Основной вопрос о методе .splice()
, и как лучше удалить элемент из массива.
Я хочу удалить элемент из массива с помощью .splice()
, но когда я это сделаю, я хочу, чтобы исходный массив минус возвращал удаленный элемент. .splice()
возвращает удаленный элемент вместо этого.
var arr = [1, 2, 3, 4, 5, 6, 7]
var newArr = arr.splice(3, 1)
console.log(newArr) // [4]
// whereas I want [1, 2, 3, 5, 6, 7]
Какой самый лучший и самый красноречивый способ сделать это?2 ответа:
.splice
изменяет массив на месте и возвращает удаленные элементы. Поэтому, если вам на самом деле не нужна функция, которая возвращает сам массив, просто обратитесь кarr
:var arr = [1, 2, 3, 4, 5, 6, 7] arr.splice(3, 1) console.log(arr) // [1, 2, 3, 5, 6, 7]
Можно создать функцию-оболочку, которая выполняет соединение и возвращает массив:
function remove(arr, index) { arr.splice(index, 1) return arr; } var newArr = remove(arr, 3); // Note: `newArr` is not a new array, it has the same value as `arr`
Если вы хотите создать новый массив , не изменяя исходный массив, вы можете использовать
.filter
:var newArr = arr.filter(function(element, index) { return index !== 3; }); // [1, 2, 3, 5, 6, 7] arr; // [1, 2, 3, 4, 5, 6, 7]
Используя оператор spread, вы можете сделать:
var arr = [1,2,3,4,5,6], indexToRemove = 3, newArr = [ ...arr.slice(0,indexToRemove), ...arr.slice(indexToRemove+1) ]
Или если вы хотите использовать ES5, это может выглядеть примерно так:
var arr = [1,2,3,4,5,6], indexToRemove = 3, newArr = [].concat(arr.slice(0,indexToRemove)).concat(arr.slice(indexToRemove+1))