У меня есть проблемы с удалением элементов из массива на основе сопоставленного значения. У меня есть массив объектов, как показано ниже:Удалить несколько элементов из массива на основе сопоставленного значения
$scope.listOfItems = [
{productID : 1, weight: 3.5, price: 5},
{productID : 2, weight: 4.5, price: 8},
{productID : 3, weight: 1.5, price: 9},
{productID : 4, weight: 2.5, price: 3},
{productID : 5, weight: 7.5, price: 1}
];
И я хочу, чтобы удалить элементы на основе массива ProductID, как показано ниже:
$scope.deleteList = [1,3];
Теперь я пытаюсь использовать две петли, чтобы проверить, productID, если каждый продукт совпадает с любым идентификатором productID в deleteList.
angular.forEach($scope.listOfItems , function(value, key){
var tmp_productID = value.productID ;
var index = key;
angular.forEach($scope.deleteList, function(value,key){
if(tmp_productID === value){
$scope.listOfItems .splice(index ,1);
}
});
});
console.log($scope.listOfItems);
Проблема это, после того, как она удаляет один с INDEX1, то index3 будет index2, таким образом, он будет удалять product2 и product5 вместо product2 и product4, что это неправильно. Также производительность будет плохой, если у меня будет большое количество объектов в массиве, и я хочу удалить половину из них. Любая идея, что я могу удалить правильную запись и улучшить производительность, если это возможно?
Работа jsfiddle http://jsfiddle.net/Lvc0u55v/10726/
У вас есть какие-либо проблемы с созданием нового массив вместо изменения на месте? –
Нажмите «<>» и создайте [mcve] – mplungjan
. Я предпочитаю не создавать новый массив, потому что у моего html есть набор данных с массивом listOfItems – Jaaaaaaay