Array.splice
изменит длину массива, поэтому вы должны выполнять итерацию в обратном направлении по всему массиву, в противном случае каждый раз, когда вы вызываете соединение, индекс и длина для l oop устаревают.
var i = $scope.invalidList.length
while (i--) {
if (IsEmailValid($scope.invalidList[i].Email) === true && IsPhoneNumValid($scope.invalidList[i].PhoneNumber) === true) {
$scope.invalidList.splice(i, 1);
}
}
Если вы хотите удалить элементы из массива на основе условия, Array.filter
предназначен именно для этой цели:
$scope.invalidList = $scope.invalidList.filter(item => !IsEmailValid(item.Email) || !IsPhoneNumValid(item.PhoneNumber))