如何检查JavaScript对象的属性名是否以特定字符串开头?

如何检查JavaScript对象的属性名是否以特定字符串开头?,javascript,object,properties,identifier,Javascript,Object,Properties,Identifier,假设我有如下javascript对象: var obj = { 'addr:housenumber': '7', 'addr:street': 'Frauenplan', 'owner': 'Knaut, Kaufmann' } 如何检查对象的属性名是否以addr开头?我可以想象以下几点是可能的: if (e.data[addr*].length) { 我尝试了RegExp和.match()但没有成功。尝试以下方法: var myObject = { 'pro

假设我有如下javascript对象:

var obj = {
    'addr:housenumber': '7',
    'addr:street': 'Frauenplan',
    'owner': 'Knaut, Kaufmann'
}
如何检查对象的属性名是否以
addr
开头?我可以想象以下几点是可能的:

if (e.data[addr*].length) {
我尝试了
RegExp
.match()
但没有成功。

尝试以下方法:

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

您可以使用
数组对照对象的键进行检查。有些
返回
bool

if(Object.keys(obj).some(function(k){ return ~k.indexOf("addr") })){
   // it has addr property
}

您还可以使用
Array.filter
并检查其长度。但是
数组。有些
在这里更合适。

您可以使用
Object.keys
函数获取一个键数组,然后使用
过滤器
方法仅选择以
addr“
开头的键

这将为您提供存在(
propertyNames.length>0
)和键的特定名称,但是如果您只需要测试是否存在,您可以将
filter
替换为
一些

我认为“查询”对象属性是不可能的。您必须逐个循环遍历属性并确定它们是否匹配。像这样的

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

Object.keys(obj).some(function(prop){
  return ~prop.indexOf('add')
}) //true
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(e,prop)
{
for(e.data中的var o){

如果(o.substr(0,prop.length)==prop)/您可以编写一个函数

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

var foo={'bar':'funtimes'};
如果(食物酒吧包括('fun')){
console.log('match');

}
您也可以使用startsWith()检查这一点:


为大家干杯!这似乎是最短最优雅的方式。@Edwin brilliant,甚至更优雅!哈哈,很快,在中使用胖箭头功能会更容易ES6@Edwin是的。
Object.key(obj.some((k)=>~k.indexOf(“addr”);
。等待它的到来:)请注意,对于非常大的对象,它的效率不是很高,因为
object.keys()
是在使用
some()
调用之前生成的;使用
按属性检查in
中的属性更有效。因为它与键有关,而不是值。这里的平铺功能是什么?
function check(model) {
   var keys = [];
   for (key in model) { 
       if(key.indexOf("addr") > -1) 
           keys.push(key); 
   }
   return keys;
}
Object.keys(obj).some(i => { return i.startsWith('addr') })