繁体   English   中英

如何检查Javascript数组中是否存在属性值?

[英]How to check if a property value exists within a Javascript array?

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

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

但是脚本在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<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>

使用以下功能:

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

假设出现以下情况:

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

然后,您可以使用过滤器查找元素:

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

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

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

您可以使用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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM