2015-07-07 2 views
0

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

$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, так что последний элемент не всегда удаляется из списка, независимо от того, какой элемент Я удаляю.

+7

Если ваша проблема касается только 'javascript', не помещайте' java' ... – tony200910041

+3

позиция '-1' указывает, что элемент отсутствует в списке. –

+0

Возможный дубликат [Удалить объект из массива с использованием JavaScript] (http://stackoverflow.com/questions/10024866/remove-object-from-array-using-javascript) – Mudassar

ответ

0

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

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

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

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

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

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

+0

Я знаю, где проблема сейчас. Спасибо! – sunny

-1

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

arrayObject.splice(param1, param2); 

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

param2 -> нет элементов будет удалить

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

arrayObject.splice(0, 1); 
+0

$ scope.list.splice (позиция, 1); – skubski

+1

FYI, 'splice' будет принимать три параметра. Третий, чтобы вставить в том же месте, где вы удаляете. Плюс 'splice' для' массивов' не для 'объектов' – Vineet

+0

ya это нормально, но для удаления одного элемента или более одного из них мы можем использовать сплайс с двумя параметрами – dom

Смежные вопросы