检查Javascript对象是否具有以特定字符串开头的属性名称

时间:2014-12-16 14:39:45

标签: javascript object properties identifier

假设我有像这样的javascript对象:

addr:housenumber: "7"
addr:street: "Frauenplan"
owner: "Knaut, Kaufmann"

如何检查对象是否具有以addr开头的属性名称?我想象以下的内容应该是

if (e.data[addr*].length) {

我尝试RegExp.match()无济于事。

8 个答案:

答案 0 :(得分:28)

您可以使用返回Array.some的{​​{1}}对象的密钥进行检查。

bool

你也可以使用if(Object.keys(obj).some(function(k){ return ~k.indexOf("addr") })){ // it has addr property } 并查看它的长度。但Array.filter更适合这里。

答案 1 :(得分:5)

您可以使用Object.keys函数获取一系列密钥,然后使用filter方法仅选择以"addr"开头的密钥。

var propertyNames = Object.keys({
    "addr:housenumber": "7",
    "addr:street": "Frauenplan",
    "owner": "Knaut, Kaufmann"
}).filter(function (propertyName) {
    return propertyName.indexOf("addr") === 0;
});
// ==> ["addr:housenumber", "addr:street"];

这为您提供了存在(propertyNames.length > 0)和密钥的具体名称,但如果您只需要测试是否存在,则只需将filter替换为some

答案 2 :(得分:2)

Obj = {address: 'ok', x:5}

Object.keys(obj).some(function(prop){
  return ~prop.indexOf('add')
}) //true

答案 3 :(得分:0)

试试这个:

var myObject = {
    'prop1': 'value1',
    'xxxxx': 'value2'
};

var stringToCheck = 'addr';

for(var propertyName in myObject) {
    var x = propertyName.substr(0, stringToCheck.length - 1);

    if(x == stringToCheck) {
        return true;
    }
}

答案 4 :(得分:0)

我不认为"查询"对象属性是可能的。您必须单独遍历属性并确定它们是否匹配。像这样......

function findProp(e, prop)
{
    for(var o in e.data){
        if(o.substr(0, prop.length)==prop) //<- you could try the regex or match operation here
            return true;
    }
    return false;
}

alert(findProp({data:{addr:{street:"a", sub:"b"}}}, 'addr'));

如果findProp返回true,则可以处理该属性...

答案 5 :(得分:0)

你可以写一个函数

function check(model) {
   var keys = [];
   for (key in model) { 
       if(key.indexOf("addr") > -1) 
           keys.push(key); 
   }
   return keys;
}

答案 6 :(得分:0)

为什么不只是

var foo = {'bar':'funtimes'};
if (foo.bar.includes('fun')) {
  console.log('match');
}

答案 7 :(得分:0)

你也可以用startsWith()来检查:

Object.keys(obj).some(i => { return i.startsWith('addr') })