Javascript - удаление элемента из массива

0

Я показываю элементы из arraylist в таблице на веб-странице. Я хочу убедиться, что, как только пользователь нажмет "удалить данные", элемент в таблице немедленно удаляется, поэтому пользователю не нужно обновляться и ждать, чтобы увидеть новую таблицу. Так что я делаю это, удаляя элемент из arraylist, ниже приведен код:

$scope.list= function(Id) {
        var position = $scope.list.indexOf(fooCollection.findElementById({Id:Id}));
        fooCollection.delete({Id:Id});

        if (position>-1) {
            $scope.list.splice(position,1);
        }
        $location.path('/list');
    };

Но я всегда всегда -1, поэтому последний элемент всегда удаляется из списка независимо от того, какой элемент я удалю.

2 ответа

0
Лучший ответ

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

var position = $scope.list.indexOf(fooCollection.findElementById({Id:Id}));

Хотя мы говорим о том же контенте, эти два объекта не совпадают, потому что:

indexOf сравнивает searchElement с элементами массива с использованием строгого равенства (тот же метод, который используется оператором === или triple-equals, operator).

Таким образом, ваша проблема решена. Вы можете увидеть, как это воспроизведено на этом плунжере.

Исправление этого быстрого пути означало бы зацикливание над вашим $ scope.list и выяснение того, какой элемент на самом деле имеет идентификатор, который передается.

  • 0
    Я знаю, где проблема сейчас. Спасибо!
-1

вы можете использовать метод splice javascript, который принимает два параметра

arrayObject.splice(param1, param2);

param1 → из этого элемента индекса начнет удалять

param2 → no элементов будет удалено

например, если вы хотите удалить только первый элемент, а ваш объект массива - arrayObject, тогда мы можем написать код следующим образом:

arrayObject.splice(0, 1);
  • 0
    $ Scope.list.splice (положение, 1);
  • 1
    К вашему сведению, splice будет принимать три параметра. Третий, чтобы вставить в то же место, где вы удаляете. Плюс splice для arrays не для objects
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню