Удалить элемент из массива (сращивание)


Основной вопрос о методе .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 2

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))