Альтернатива array.splice в JavaScript

В настоящее время я работаю над проектом, где я храню числовые значения в массиве JS. После некоторых изменений он должен быть удален снова. В настоящее время я использую метод array.splice следующим образом:

function removeA(arr, element) {
    var index = arr.indexOf(element);
    if (index >= 0) {
        arr.splice(index, 1 );
    }
    return arr;
} 

Но это, кажется, вызывает у меня проблемы с Safari. Этот фрагмент кода работает во всех браузерах, таких как Chrome, Firefox, Opera. Но не на сафари. Это даже работает в техническом превью Safari.

У кого-нибудь есть альтернатива?

Заранее спасибо:)

6 ответов

Вы должны нарезать до и после индекса, и concat результаты, достижения. Обратите внимание, что Array.prototype.slice() не изменяет исходный массив, как Array.prototype.splice() делает.

var arr = [0, 1, 2, 3, 4, 5, 6, 7];
var index = 5;

var result = arr.slice(0, index).concat(arr.slice(index + 1));

console.log(result);

Или используя ES6 и распространение массива:

var arr = [0, 1, 2, 3, 4, 5, 6, 7];
var index = 5;

var result = [...arr.slice(0, index), ...arr.slice(index + 1)];

console.log(result);

Вы можете использовать встроенный фильтр ()

var array = [1,2,3,7,4,5,6,7,12,54,7,691];
var array = array.filter(x => x !== 7);
console.log(array);

Еще одна альтернатива array.splice в JavaScript есть array.reduce

var arr =[1,2,3,2,4,5,6,2];
var newarr = arr.reduce((acc, elem) => elem !== 2 ? acc.concat(elem) : acc, []);
console.log(newarr);

Извините за опоздание, но, надеюсь, это будет полезно для кого-то другого

Еще несколько идей:

Вариант АflatMap():

Вернуть пустой []для «фильтрации» элементов. Менее эффективен, но может быть полезен, если вы хотите добавить новые элементы.

Попробуйте slice() метод

arr = arr.slice(index, 1 );
Другие вопросы по тегам