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

Ale*_*utz 16 javascript properties object identifier

可以说我有像这样的javascript对象:

addr:housenumber: "7"
addr:street: "Frauenplan"
owner: "Knaut, Kaufmann"
Run Code Online (Sandbox Code Playgroud)

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

if (e.data[addr*].length) {
Run Code Online (Sandbox Code Playgroud)

我试着RegExp.match()无济于事.

Ami*_*oki 33

您可以使用Array.some返回a 的Object键检查它bool.

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

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

  • 你可以通过在**k.indexOf .......**前面放置"〜"来摆脱**> -1** (8认同)
  • @Edwin是的..`Object.keys(obj.some((k)=> ~k.indexOf("addr"));`.等待它来:) (3认同)
  • 请注意,对于非常大的对象,效率不是很高,因为“Object.keys()”是在调用“some()”之前生成的;使用“for in”按属性检查属性会更有效。 (3认同)

Eth*_*ynn 6

您可以使用该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"];
Run Code Online (Sandbox Code Playgroud)

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


Edw*_*oso 6

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

Object.keys(obj).some(function(prop){
  return ~prop.indexOf('add')
}) //true
Run Code Online (Sandbox Code Playgroud)

  • Tilders 的功能是什么? (2认同)