Как удалить элемент из массива объекта с помощью angularjs?

0

Я хотел бы удалить индекс из массива, если ответ службы поддержки возвратит true, поэтому в нижеприведенном случае допустим, что у нас есть true из службы отдыха, я хотел удалить объект, где id является "RA_ATTST_LANGUAGE" из массива. Я пробовал код ниже, но не удалял то, что не хватает?

main.js

MessageAdminNotificationFactory.getAttestationLanValidation().then(function(response){
        var data = response.data;
        console.log('attestation',data);
        if(data){
          angular.forEach($scope.adminDataSource,function(value,$index){
            if(value.id === 'RA_ATTST_LANGUAGE'){
              $scope.adminDataSource.splice($index, 1);
            }
            console.log('dropdown',value.id);
          });
        }
      });

$scope.adminDataSource = [{
    "uid": null,
    "index": 0,
    "selected": null,
    "expanded": null,
    "id": "RA_PLTFRM_NOTIF",
    "text": "Platform Maintenance Notification",
    "parentId": null,
    "items": null
}, {
    "uid": null,
    "index": 0,
    "selected": null,
    "expanded": null,
    "id": "RA_ATTST_LANGUAGE",
    "text": "Attestation Language",
    "parentId": null,
    "items": null
}]
  • 0
    Вы модифицируете массив, когда вы перебираете его индекс. Не уверен, что это причина, но вы никогда не должны этого делать. по крайней мере, разорвать петлю, если вы делаете. Но вы должны использовать Array.filter
  • 0
    Это действительно не имеет ничего общего с угловым
Теги:
arrays

2 ответа

1
Лучший ответ
$scope.adminDataSource = $scope.adminDataSource.filter(
  function(value){
     return value.id !== 'RA_ATTST_LANGUAGE';
})

Array.filter - это путь. отфильтровывает все, что оценивается как false;

  • 0
    Спасибо за помощь, это сработало!
0

Итерировать массив от конца до начала

for(var i=$scope.adminDataSource.length-1;i>=0;i--){
    var value = $scope.adminDataSource[i];
    if(value.id === 'RA_ATTST_LANGUAGE') {
       $scope.adminDataSource.splice(i,1);
    }
}

Таким образом, не имеет значения, сжимается ли массив во время повтора.

  • 0
    Избегайте использования let, если вопрос не помечен как es6?
  • 0
    Вы правы. Просто моя машинописная привычка. TS переходит в вар.
Показать ещё 2 комментария

Ещё вопросы

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