2016-05-26 13 views
0

私はコントローラから私のビューに渡される型付きオブジェクトの配列を持っています。文字列値が配列内のAdminEmailAddress文字列型オブジェクトのいずれかと一致するかどうかを確認する必要があります。Javascript配列内にプロパティ値が存在するかどうかをチェックする方法は?

を使用して、文字列currentUserEmailがそのリスト内の管理用メールと一致するかどうかを確認するためにif conditionを作成しています。

しかし、このスクリプトは、ifの条件に壊れる:

if (adminUserList.AdminEmailAddress.indexOf(currentUserEmail) > -1) 

私もcurrentUserEmail文字列との両方のデータが移入されadminUserListアレイ上の警告を置きます。

参考のために、以下のように実行時にadminUserListの内容は次のとおりです。

var adminUserList = [{"AdminID":1,"AdminDisplayName":"brianb","AdminEmailAddress":"[email protected]"},{"AdminID":2,"AdminDisplayName":"wendy","AdminEmailAddress":"[email protected]"}]; 

質問:文字列は、アレイ内のプロパティの値と一致した場合に

どのように確認できますか?

コード:AdminEmailAddressプロパティを含む

リストタイプ - コントローラからビューに渡さ

List type public class AdminUsers 
{ 
    public int AdminID { get; set; } 
    public string AdminDisplayName { get; set; } 
    public string AdminEmailAddress { get; set; } 

} 

一覧:

List<AdminUsers> adminList = sqlConnection.GetAdminUsers(); 
ViewBag.AdminUserList = adminList; 

スクリプトif condition含まれています

<script> 

    var currentUserEmail = '@ViewBag.CurrUserEmail'; 
    var adminUserList = @Html.Raw(Json.Encode(ViewBag.AdminUserList)); 


    $(document).ready(function() { 

     var historyTable = $('#table').DataTable({ 
      "order": [[6, "desc"]] 
     }); 


     if (adminUserList.AdminEmailAddress.indexOf(currentUserEmail) > -1) 
     { 
      historyTable.columns([9]).visible(false); 
     } 



    }); 
</script> 

答えて

1

使用次の関数:次に

var adminUserList = [{"AdminID":1,"AdminDisplayName":"brianb","AdminEmailAddress":"[email protected]"},{"AdminID":2,"AdminDisplayName":"wendy","AdminEmailAddress":"[email protected]"}]; 
var currentUserEmail = '[email protected]'; 

あなたが要素を見つけるためにfilterを使用することができます:

var matchArray = adminUserList.filter(function(element){ 
    return element.AdminEmailAddress === currentUserEmail; 
}) 
alert(matchArray.length > 0); 

あなたも持っている。この方法は、次のような状況を想定し

function checkEmailExists(currentUserEmail){ 

     var match = false; 
     for(var i=0;i<adminUserList.length;i++){ 
      if(adminUserList[i]["AdminEmailAddress"].indexOf(currentUserEmail) > -1){ 
       match = true; 
       break; 
      } 

     } 

     return match; 
    } 
1

実際の結果へのアクセス:

if(matchArray.length > 0) { 
    alert(matchArray[0].AdminDisplayName) 
} 
1

あなたはfindに配列の要素find関数を使用できます。ユーザーが発見された場合

var adminUserList = [{"AdminID":1,"AdminDisplayName":"brianb","AdminEmailAddress":"[email protected]"},{"AdminID":2,"AdminDisplayName":"wendy","AdminEmailAddress":"[email protected]est.com"}]; 

var mailToCheck = '[email protected]' 

var adminFound = adminUserList.find(function(admin){ return admin.AdminEmailAddres === mailToCheck}); 

をユーザーがそうadminFoundがundefinedなり、返されます。

しかし、なぜそれをフロントエンドで行うのですか? ユーザーのデータがブラウザに表示されますが、私は良い方法ではないと思います。 私はバックエンドでこれを行い、真偽の応答を返すことをお勧めします。

関連する問題