23

私はこのような配列を持っています:

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

だから、空のメールを削除したいのですforEachが、最後のオブジェクトであるオブジェクトを1つだけ削除するAngularメソッドはなぜですか???.

jsコード

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

     } 

    });

私が間違っているところ

JSビン

4

5 に答える 5

59

問題は、ループ中に配列から要素を削除するため、後の項目が異なるインデックスになることです。代わりに逆方向にループする必要があります。

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

更新された例を次に示します。

于 2014-06-13T10:19:17.243 に答える