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

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

我有一个从控制器传递到我的视图中的类型化对象数组。要求是检查字符串值是否与该数组中的任何 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; }

}

从控制器传入视图的列表:

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

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

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

如果找到用户,用户将被 returned,否则 adminFound 将被 undefined

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