将键/值数组中的对象与另一个对象(键/值)进行比较
Comparing objects from key/value array with another object (Key/value)
所以这是我目前遇到的问题。
我想检查用户是否有权使用一个功能查看页面。
因此,我有一个带有键/值的数组,我在其中存储权限。
{"authorities":[{"role":"gebruikersbeheer"},{"role":"kijken"},{"role":"plannen"}]};
存储在service.currentUser
中,可以使用service.currentUser.authorities
调用。
我有一个功能:
hasPermission: function (permission) {
var role = { "role" : permission };
for(perm in service.currentUser.authorities)
{
var test = service.currentUser.authorities[perm];
if(test === role)
{
return (!!(service.currentUser) && true);
}
}
return false;
}
我创建了test
变量来调试它的值。permission
参数的值为"gebruikersbeher"。
现在我想比较perm
密钥和role
的值,并检查它是否为真。现在我在互联网上搜索了一下,只找到了对我来说既不可行也不可行的解决方案。
当我开始调试时,我的perm
有一个整数值。为什么不是钥匙的名字?(必须是"角色")此外,当我对role
和test
变量使用Watch时,它们完全相同,但我仍然无法比较它们并获得true
。
(此时不要介意退货声明。)而且我不能修改数组。它是通过这种方式由弹簧安全返回的。
有没有更好的方法来检查authorities
是否包含role
?它可能是重复的,但我找不到任何适合我具体情况的东西。
干杯。
您当前正在用另一个对象检查一个对象,最好用字符串检查字符串,下面显示了一个相同函数的小例子,但使用了some方法;
var currentUser = {"authorities":[{"role":"gebruikersbeheer"},{"role":"kijken"},{"role":"plannen"}]};
function hasPermission(permission) {
return currentUser.authorities.some(function(v){
return v.role === permission;
});
}
alert("Have permission? "+ hasPermission("gebruikersbeheer"))
service.currentUser.authorities
是一个数组,这就是为什么在for(perm in service.currentUser.authorities)
中为perm
获取整数的原因。
另一个问题是,无法使用===
比较对象中的所有属性(包括原型属性),因此需要显式比较属性的值。。。或者创建一个自定义函数来比较对象。
您可以尝试使用:
hasPermission: function (permission) {
var role = { "role" : permission };
for(perm in service.currentUser.authorities)
{
var test = service.currentUser.authorities[perm];
if(test["role"] === role["role"])
{
return (!!(service.currentUser) && true);
}
}
return false;
}
希望这有帮助,
由于您只关心某个东西是否存在,因此可以使用Array.Some函数。它仍然在数组中循环,但会在命中第一个真实实例时停止。您的方法基本上已经在做同样的事情了,但这样做会更干净一些,因为它使用了数组的实际元素(而不是索引)。
hasPermission: function (permission) {
var authArray = service.currentUser.authorities;
var hasAuth = authArray.some(function(kvp) {
return kvp.role == permission; //function to determine a match
});
return hasAuth;
}
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 如何将LatLng对象与数组中的另一个对象进行比较
- 将键/值数组中的对象与另一个对象(键/值)进行比较
- 在jquery中,json对象How中的每个循环(使循环从对象中找到一个值,并与另一个对象值进行比较,以避免重复打印)
- 比较两个对象以覆盖其中一个对象的值
- 将一个对象与数组中的前一个对象进行比较
- 对象比较:检查一个对象是否包含整个其他对象
- 通过属性与另一个对象的键比较对象数组