在不知道"name"的情况下返回对象内部"name"的属性



好吧,这可能是一个非常愚蠢的问题,但我必须问。我在一个物体里面有一个物体:

var user = {
playlist: "abcd1234",
role: {
basic: true,
}
};

我知道我可以通过以下方式访问该角色:

user.role

它将在控制台中返回{basic:true}。我的问题是,如果我不知道里面的角色是什么,我怎么能回到"基本"?

我正在做一个项目,在这个项目中,我得到了(用户的(多个对象,并且需要将他们的角色放入一个选择字段中。我只是希望让"basic"(例如(看起来更好一点,作为用户选择的选项,而不是basic=true。

如果您只想要user.role内的属性名称,那么Object.keys((可能就是您想要的。它在数组中返回对象的所有属性名称(也称为"键"(。

var user = {
playlist: "abcd1234",
role: {
basic: true,
}
};
let roles = Object.keys(user.role);
console.log(roles); // ["basic"]

但如果你只想要true的角色,那就需要一些过滤:

var user = {
playlist: "abcd1234",
role: {
basic: true,
admin: false,
free: true
}
};
const reduceTrues = (acc, [key, val]) => {
if (val === true) { acc.push(key); }
return acc;
}
const trueRoles = Object.entries(user.role).reduce(reduceTrues, []);
console.log(trueRoles);
// [ 'basic', 'free' ]

使用类似的Object.keys()方法

var user = {
playlist: "abcd1234",
role: {
basic: true,
}
}
const role = Object.keys(user.role)
console.log(role) // ["basic"]
console.log(user.role[role]) // true

MDN中的完整文档

如果你想获得对象的属性,你可以简单地使用

var user = {
playlist: "abcd1234",
role: {
basic: true,
}
};
var roles=Object.keys(user.role);
console.log(roles);
<html>
<script>
var user = {
playlist: "abcd1234",
role: {
basic: true,
admin: false,
free: false
}
};

for(role in user.role){
if(user.role[role]){
console.log(role);
}
}
</script>
</html>

因此,您实际上是在user.role对象中的未知属性上进行迭代。对于user.role中的每个role,用user.role[role]检查它是否为真-[role]是我们不知道的变量名-然后我只使用console.log,如果它为真,如果你愿意,你可以运行其他逻辑。

如果您有多个角色,我建议您将这些角色作为逗号分隔的列表,然后使用String.split()方法进行拆分。

例如:

var user = { playlist: "abcd1234", role: "basic, pro, other" };
var roles = user.role.split(",");
//You now have an array of roles

但如果您只有一个角色,只需将其设置为中的字符串即可

var user = { playlist: "abcd1234", role: "basic" };
//You can check if role is empty by a simple if statement
if(user.role != null && user.role != undefined && user.role != "")
console.log("user role is "+user.role);

相关内容

最新更新