2016-05-26 3 views
0

У меня есть массив типизированных объектов, которые передаются в мое представление с контроллера. Требование состоит в том, чтобы проверить, соответствует ли строковое значение любому из объектов типа строки AdminEmailAddress внутри этого массива.Как проверить, существует ли значение свойства в массиве Javascript?

Что я пытался создать if condition, чтобы проверить, соответствует ли строка currentUserEmail любой электронной почте администратора в этом списке, используя indexOf.

Но сценарий разбивает на если условии:

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

Используйте следующие функции:

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

Предполагая следующую ситуацию:

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

Таким образом, вы также Доступ к фактическим данным:

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

Вы можете использовать функцию поиска, чтобы find в элемент массива:

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}); 

Если пользователь найден пользователь будет возвращен, в противном случае adminFound будет undefined.

Но зачем это делать в интерфейсе? Данные пользователя доступны в браузере, я не думаю, что это хорошая практика. Я предлагаю вам сделать это в своем бэкэнд и вернуть истинный/ложный ответ.