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