Javascript сращивание

У меня есть массив MyArray, и я хочу удалить один элемент в позиции i.

Я пробовал:

MyArray = MyArray.splice(i, 1); 

но он возвращает элемент, который я хочу удалить, вместо массива без элемента, который я хочу удалить.

Я уверен, что это простое исправление, спасибо в любом случае.

Ответ 1

Изменить

MyArray = MyArray.splice(i, 1); 

в

MyArray.splice(i, 1); 

Ответ 2

Вы должны прочитать документацию о сращивании

Резюме

Изменяет содержимое массива, добавляя новые элементы при удалении старых элементов.

Исходный массив изменяется, вместо того, чтобы возвращать новый массив с удаленными указанными элементами. MyArray.splice(i, 1); должно быть достаточно.

Ответ 3

splice() является деструктивным методом, поскольку он имеет побочные эффекты, кроме возвращаемого значения. Пока он возвращает удаленный элемент, он изменяет фактический массив, в котором вы прошли.

alert("Before: " + MyArray);
MyArray.splice(i, 1);
alert("After: " + MyArray);

Ответ 4

splice редактирует массив на месте.

var arr = [1, 2, 3, 4];
// arr is [1, 2, 3, 4];
var el = arr.splice(0, 1);
// el is [1], arr is now [2, 3, 4].

Ответ 5

Ты в значительной степени получил это! однако не назначайте его новому значению.. просто используйте свой существующий массив.

MyArray.splice(i, 1);
Something = MyArray;

Надеюсь, это поможет!

Ответ 6

У меня была аналогичная проблема, тем более, что я хотел только удалить определенный элемент в массиве, а не все элементы, соответствующие этому элементу.

Я создал это расширение для наблюдаемых массивов KO, которое, похоже, работает. Я еще не пробовал его с массивами объектов, но я не понимаю, почему это не сработает.

Когда я впервые изучал KO, мне было очень трудно справляться с массивами, поэтому я надеюсь, что это будет полезно для других:

JavaScript:

ko.observableArray.fn.removeAt = function (index) {
  this.valueWillMutate();
  this.splice(index, 1);
  this.valueHasMutated();
}

HTML:

<div data-bind="foreach: Answers">
    <input type="text" data-bind="value: $data"/>
    <button 
        data-bind="click: function(){ $parent.Answers.removeAt($index()) }"                          
        title="Remove"
    >X</button>
</div>

Ответ 7

Синтаксис

array.splice(index , howMany[, element1[, ...[, elementN]]])

Описание

Изменяет содержимое массива, добавляя новые элементы при удалении старых элементов.

Возврат

Массив, содержащий удаленные элементы. Если удаляется только один элемент, возвращается массив из одного элемента. Если элементы не удалены, возвращается пустой массив.

from Метод сращивания массива - JavaScript | MDN

Ответ 8

здесь другой способ (если вы все же хотите установить его как переменную и сохранить исходный массив одинаково):

// example array
var foo = ['1', '13', '44', '17', '17', '19', '1', '7', '17'];

// lets say we want to remove one of the 17s from the array
// convert array to string, do replacements, then convert back
var bar = foo.join().replace('17', '').replace(/\,\,/gi, ',').split(',');

// should log ['1', '13', '44', '17', '19', '1', '7', '17']
console.log(bar);

в зависимости от того, как структурирован ваш массив, иногда проще запрашивать/манипулировать строкой вместо массива (а иногда наоборот)