2016-05-26 8 views
0

Ich habe ein Array von typisierten Objekten, die von einem Controller in meine Ansicht übergeben werden. Die Anforderung besteht darin, zu überprüfen, ob ein Zeichenfolgenwert mit einem der Zeichenfolgenobjekte AdminEmailAddress in diesem Array übereinstimmt.Wie überprüft man, ob ein Eigenschaftswert in einem Javascript-Array existiert?

Was ich versucht habe, ist ein if condition zu erstellen, um zu überprüfen, ob die Zeichenfolge currentUserEmail mit einer der Admin-E-Mails in dieser Liste übereinstimmt, mit indexOf.

Aber das Skript bricht auf der, wenn die Bedingung:

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

Ich habe auch eine Warnung auf das currentUserEmail String und das adminUserList Array, das mit Daten sowohl bestückt ist.

Der Inhalt des adminUserList während der Laufzeit folgt Referenz als:

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

Frage:

Wie kann man überprüfen, ob eine Zeichenfolge, die einen Eigenschaftswert innerhalb eines Arrays entspricht?

Code:

Liste Typ die AdminEmailAddress Eigenschaft enthält -

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

} 

Liste in von Controller-übergeben Ansicht:

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

Skript, das die if condition enthält:

<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> 

Antwort

1

Verwenden folgende Funktion:

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

die folgende Situation Unter der Annahme:

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

Dann können Sie filter Elemente zu finden, verwenden:

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

diese Weise können Sie auch haben Zugang zu den tatsächlichen Ergebnissen:

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

Sie könnten die Suchfunktion zu find das ein Element des Arrays verwenden:

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

var mailToCheck = '[email protected]' 

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

Wenn der Benutzer den Benutzer zurückgegeben werden gefunden wird, da sonst die adminFound undefined sein wird.

Aber warum das im Front-End? Benutzerdaten im Browser verfügbar, denke ich nicht, ist eine gute Praxis. Ich schlage vor, dass Sie das in Ihrem Backend tun und eine wahre/falsche Antwort zurückgeben.