好吧,这可能是一个非常愚蠢的问题,但我必须问。我在一个物体里面有一个物体:
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);