2017-05-09 2 views
1

現在、入力フィールドから$ scope値を取得し、それを招待されたユーザーを含む新しい配列に追加する少しの関数を書いています。

私はJavaScriptのフィルタメソッドを使用しようとしている配列への重複エントリを防止するために。

私の問題は、コンソールに出力されているものを見ると、filter関数内のconsole.logは常に同じ電子メール値を出力します。新しい入力を更新して考慮していないようです。例えばユーザーが2人のユーザーを追加した場合、最初のユーザーが追加され、招待アーティストには最初のメールのみが含まれます。

 var invitesArr = $scope.invites; 
     console.log(invitesArr) 
     console.log($scope.searchContacts) 

     if ($scope.invites.length >= 0) { 
      invitesArr.filter(function(invitesArr) { 
       console.log(invitesArr.Email) 
       return invitesArr.Email === $scope.searchContacts; 
      }); 

      if (invitesArr == false) { 
       courseAccountService.inviteGuestToCourse($scope.courseId,$scope.searchContacts). 
       then(function(invitation) { 
        $scope.invites.push(invitation); 
       }); 
      } 
     } 
+0

array、filter関数、boolean条件内で同じ変数** invitesArr **を使用する特別な理由 –

+0

メールの値に元の配列と一致する値があるかどうかを確認するだけで済みます。たとえば$ scope.invitesにxが含まれている場合、新しい$ scope.searchContactsがxに一致するかどうかを確認する必要があります – theHussle

答えて

0

以下のコード試してみてください。

var invitesArr = $scope.invites; 
    console.log(invitesArr) 
    console.log($scope.searchContacts) 

    if ($scope.invites.length >= 0) { 
     //use arrow operator instead of function. 
     var duplicateEmails = invitesArr.filter((item) => { 
      console.log(invitesArr.Email) 
      //assuming datatype of item.Email and $scope.searchContacts are same else use == for comparision 
      return item.Email === $scope.searchContacts; 
     }); 

     //Check for length and then push to your invites 
     if (duplicateEmails.length==0) { 
      courseAccountService.inviteGuestToCourse($scope.courseId,$scope.searchContacts). 
      then(function(invitation) { 
       $scope.invites.push(invitation); 
      }); 
     } 
    } 

はそれが役に立てば幸いに!!

関連する問題