我有一个大约10个数组的对象。我想检查对象是否包含2个数组中的一个。 (我知道服务器返回的数组的名称)
data.serverObjects = {
cityNames : [],
cityCodes: [],
cityMapData: []
}
我正在努力实现以下结果:
data.serverObject.hasOneOfKey('key1', 'key2') //should return false
data.serverObject.hasOneOfKey('cityNames', 'key2') //should return true
我想使用_.findKey
来实现,但我使用的underscore
版本1.6不支持此功能。
请提出一些解决方案。
答案 0 :(得分:2)
只需迭代密钥并查看hasOwnProperty
:
Object.prototype.hasOneOfKey = function(){
for(var i=0;i<arguments.length;i++){
if(this.hasOwnProperty(arguments[i])){
return true;
}
}
return false;
};
答案 1 :(得分:0)
这是一个功能性解决方案:
Object.prototype.hasOneOfKey = function(keys){
return Object.keys(this).filter(function(d){
return keys.indexOf(d) >= 0;
}).length > 0;
}
示例:
var person = {
name: "Bart",
surname: "Simpson"
};
person.hasOneOfKey(["name","age"]); // true
person.hasOneOfKey(["age"]); // false
答案 2 :(得分:0)
这是一个解决方案。
P.S:这仅适用于函数hasOneOfKey
var serverObjects = {
cityNames: [],
cityCodes: [],
cityMapData: []
}
Object.prototype.hasOneOfKey = function(a, b) {
return (a in this || b in this);
}
console.log(serverObjects.hasOneOfKey('key1', 'key2'));
console.log(serverObjects.hasOneOfKey('key1', 'cityNames'));
&#13;
答案 3 :(得分:0)
由于我是下划线的粉丝,我提出了以下解决方案。如果这看起来不错,请建议。
鉴于对象是,
var serverObjects = {
cityNames: [],
cityCodes: [],
cityMapData: []
}
<强>解决方案:强>
var serverObject = _.keys(data.serverObject);
var hasOneOfKey = _.any(serverObject, function (property) {
return (property.indexOf('cityNames') !== -1 || property.indexOf('key') !== -1);
});