Вопрос по javascript – соединение JavaScript

11

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

Я старался:

MyArray = MyArray.splice(i, 1); 

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

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

Ваш Ответ

8   ответов
0

ю и сохранить исходный массив таким же):

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

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

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

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

Return

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

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

2

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

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

у значению ... просто используйте существующий массив.

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

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

Да, метод splice редактирует существующий массив и возвращает удаленные элементы в виде отдельного массива. Проверьте MyArray после сращивания. Больше информации:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
19

+ Изменить

MyArray = MyArray. 

в

MyArray. 
11

документация по сращиванию

Summary

Changes the content of an array, adding new elements while removing old elements.

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

хорошо спасибо; Надеемся, что заголовок вопроса будет оптимизирован для SEO, так что другие смогут найти его, не разбирая всю документацию :) frenchie
3

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

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

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

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

Когда я впервые изучал 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>

Похожие вопросы