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

How to check if a JavaScript Object has a property name that starts with a specific string?

本文关键字:字符串 开头 属性 何检查 检查 是否 对象 JavaScript      更新时间:2023-09-26

假设我有这样的javascript对象:

var obj = {
    'addr:housenumber': '7',
    'addr:street': 'Frauenplan',
    'owner': 'Knaut, Kaufmann'
}

如何检查对象的属性名称是否以 addr 开头?我想像下面这样的事情应该是可能的:

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

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

您可以使用

返回boolArray.some根据对象的键进行检查。

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

您也可以使用Array.filter并检查其长度。但Array.some在这里更贴切。

可以使用

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(和键的特定名称,但如果你只需要测试是否存在,你可以用some替换filter

Obj = {address: 'ok', x:5}
Object.keys(obj).some(function(prop){
  return ~prop.indexOf('add')
}) //true
你也可以

用startsWith((来检查这一点:

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

试试这个:

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

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

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,则可以处理该属性...

你可以写一个函数

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

为什么不只是

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