source

각 및 스플라이스에 대한 angularjs

factcode 2023. 10. 1. 22:00
반응형

각 및 스플라이스에 대한 angularjs

이런 배열이 있습니다.

$scope.emails = [
  {"key":"Work","value":"user@domine.com"},
  {"key":"","value":""},
   {"key":"Work","value":"user2@domine.com"}
  {"key":"","value":""}];

그래서 빈 이메일을 지우고 싶지만 각도가 깁니다.forEach메소드는 마지막 개체인 하나의 개체만 제거합니다. 왜 그럴까요??.

js코드

angular.forEach($scope.emails, function(email, index){
     if(email.value ===""){
       $scope.emails.splice(index, 1);

     } 

    });

내가 잘못하고 있는 곳에

제이에스빈

문제는 루프 중에 배열에서 요소를 제거하여 이후 항목이 다른 인덱스에 있도록 한다는 것입니다.대신 뒤로 루프해야 합니다.

for (var i = $scope.emails.length - 1; i >= 0; i--) {
    if (!$scope.emails[i].value) {
        $scope.emails.splice(i, 1);
    }
}

여기 업데이트된 예시가 있습니다.

다른 사람들이 지적한 것처럼, 코드의 원인은 배열이 제거되었다는 것입니다.각.각.에 대해 가법/할당 접근법을 시도해 볼 수 있습니다.

var filteredEmails = [];
angular.forEach($scope.emails, function(email, index){
    if(email.value !==""){
        filteredEmails.push(email);
    }
});

$scope.emails = filteredEmails;

indexOf돌아온다-1물건을 찾을 수 없을 때.

항목을 제거하고 마지막 항목을 찾을 수 없을 때 제거하지 않는 방법은 다음과 같습니다.

var index = $scope.items.indexOf($scope.oldItem);

if (index != -1) {
  $scope.items.splice(index, 1);
}
describe('Foreach Splice', function () {
  it('splicing', function () {

    var elements = [
      {name: "Kelly", age: 16},
      {name: "", age: 17},
      {name: "Becky", age: 18},
      {name: "", age: 18},
      {name: "Sarah", age: 19},
      {name: "", age: 20},
      {name: "", age: 22},
      {name: "Mareck", age: 21},
      {name: "", age: 21},
      {name: "Mareck", age: 21}
    ];

    removeEmptyEntry(elements);
    console.log(elements);
  });


  function removeEmptyEntry(elements) {
    elements.forEach(function (element, index) {
      if (!element.name) {
        elements.splice(index, 1);
        removeEmptyEntry(elements);
      }
    });
  }
});

AngularJs로 시도해 본 적은 없지만 Angular 4에서는 비슷한 방식으로 작동합니다.

angular.forEach($scope.emails, function(email){
 if(email.value ===""){
   $scope.emails.splice($scope.emails.indexOf(email), 1);
 } 

});

각도 4 버전:

this.emailArray.forEach(email => {
  if (email.value == "") {
    this.emailArray.splice(this.emailArray.indexOf(email),1);
  }
});

언급URL : https://stackoverflow.com/questions/24202962/angularjs-foreach-and-splice

반응형