假设我有像这样的 JavaScript 对象:
var obj = {
'addr:housenumber': '7',
'addr:street': 'Frauenplan',
'owner': 'Knaut, Kaufmann'
}
我该如何检查对象是否具有以 addr
开头的属性名称?我想象下列代码应该是可行的:
if (e.data[addr*].length) {
我尝试使用 RegExp
和 .match()
,但都无济于事。
假设我有像这样的 JavaScript 对象:
var obj = {
'addr:housenumber': '7',
'addr:street': 'Frauenplan',
'owner': 'Knaut, Kaufmann'
}
我该如何检查对象是否具有以 addr
开头的属性名称?我想象下列代码应该是可行的:
if (e.data[addr*].length) {
我尝试使用 RegExp
和 .match()
,但都无济于事。
你可以使用Array.some
来检查它是否是对象的键,它会返回一个bool
值。
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"];
如果你只需要测试存在性,你可以用some
替换filter
,这样就可以得到存在性(propertyNames.length > 0
)和键的具体名称。
Obj = {address: 'ok', x:5}
Object.keys(obj).some(function(prop){
return ~prop.indexOf('add')
}) //true
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');
}
Object.keys(obj.some((k) => ~k.indexOf("addr"));
。等待它到来 :) (翻译:期待Object.keys(obj.some((k) => ~k.indexOf("addr"));
的到来) - Amit JokiObject.keys()
在调用some()
之前生成的效率不高;更有效率的方法是逐个属性使用for in
进行检查。 - Skywalker13