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

Check if javascript object contains some of gives keys

我有一个大约有 10 个数组的对象。我想检查对象是否包含 2 个数组之一。 (我知道服务器数组的名称 returns)

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 版本,它不支持这个功能。

请提出一些解决方案。

这是一个实用的解决方案:

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

只需遍历键并检查 hasOwnProperty:

Object.prototype.hasOneOfKey = function(){
    for(var i=0;i<arguments.length;i++){
        if(this.hasOwnProperty(arguments[i])){
            return true;
        }
    }

    return false;
};

这是一个解决方案。

P.S: 这只适用于函数 hasOneOfKey

中的 2 个值

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'));

因为我是下划线的粉丝,所以我想出了以下解决方案。如果这看起来不错,请提出建议。

给定的对象是,

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);
});