【问题标题】:How to check if a property value exists within a Javascript array?如何检查 Javascript 数组中是否存在属性值?
【发布时间】:2016-09-24 05:44:48
【问题描述】:

我有一个类型化对象数组,它从控制器传递到我的视图中。要求是检查字符串值是否与该数组中的任何AdminEmailAddress 字符串类型对象匹配。

我尝试创建一个if condition 来检查字符串currentUserEmail 是否匹配该列表中的任何管理员电子邮件,使用indexOf

但脚本在 if 条件下中断:

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

我还在currentUserEmail 字符串和adminUserList 数组上设置了警报,这两个数组都填充了数据。

运行时adminUserList的内容如下供参考:

var adminUserList = [{"AdminID":1,"AdminDisplayName":"brianb","AdminEmailAddress":"brian@test.com"},{"AdminID":2,"AdminDisplayName":"wendy","AdminEmailAddress":"wendy@test.com"}];

问题:

如何检查字符串是否与数组中的属性值匹配?

代码:

包含 AdminEmailAddress 属性的列表类型 -

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

}

从Controller传入View的List:

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>

【问题讨论】:

    标签: javascript arrays model-view-controller types indexof


    【解决方案1】:

    你可以使用 find 函数来find数组的一个元素:

    var adminUserList = [{"AdminID":1,"AdminDisplayName":"brianb","AdminEmailAddress":"brian@test.com"},{"AdminID":2,"AdminDisplayName":"wendy","AdminEmailAddress":"wendy@test.com"}];
    
    var mailToCheck = 'wendy@test.com'
    
    var adminFound =  adminUserList.find(function(admin){ return admin.AdminEmailAddres === mailToCheck});
    

    如果找到用户,则返回用户,否则 adminFound 将是undefined

    但是为什么要在前端这样做呢? 浏览器中可用的用户数据,我不认为是一个好的做法。 我建议您在后端执行此操作并返回真/假响应。

    【讨论】:

      【解决方案2】:

      假设如下情况:

      var adminUserList = [{"AdminID":1,"AdminDisplayName":"brianb","AdminEmailAddress":"brian@test.com"},{"AdminID":2,"AdminDisplayName":"wendy","AdminEmailAddress":"wendy@test.com"}];
      var currentUserEmail = 'wendy@test.com';
      

      然后你可以使用filter来查找元素:

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

      这样您也可以访问实际结果:

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

      【讨论】:

        【解决方案3】:

        使用以下功能:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-06
          • 2015-03-28
          • 2013-08-28
          • 2016-01-17
          • 2021-10-10
          • 1970-01-01
          • 1970-01-01
          • 2013-08-19
          相关资源
          最近更新 更多