我需要的其实是一个可以递归地查看对象中是否存在某个键或属性的 hasOwnProperty() 或 'in' 函数。
例如,我有以下对象:
var user = {
username: "Derpette",
profile: {
role: 'admin',
sex: 'female',
emails:['derpette42@derpmail.com']
}
}
我想知道在对象或其子对象中是否存在一个名为'role'的键/属性。
因此,我希望能够调用类似user.hasProperty('role')
的东西,并返回true
。
目前,我正在使用if语句和一系列断言来检查,但这看起来并不干净,特别是对于深度嵌套的属性。
例如,我会这样做:
if(user && user.profile && user.profile.role){
//Manipulate/Use user.profile.role here
}
另一个使用此功能的例子是,如果我正在过滤来自客户端的mongoDB更新修饰符。我想确保他们没有更新自己的角色,因此我需要检查属性“role”是否在其mongoDB修改器JSON对象中的任何位置。但它可能在修饰符中的几个位置,所以在这种情况下,进行属性链接的if语句不起作用。
我需要编写自己的递归hasOwnProperty吗?我认为像jquery或underscores.js或sugar.js这样的项目中应该已经存在类似的东西,但我似乎找不到它。