检查javascript对象是否包含某些给定键

时间:2016-09-02 10:52:44

标签: javascript underscore.js

我有一个大约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不支持此功能。

请提出一些解决方案。

4 个答案:

答案 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

中的2个值

&#13;
&#13;
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;
&#13;
&#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);
});