[英]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.