假设我有像这样的javascript对象:
addr:housenumber: "7"
addr:street: "Frauenplan"
owner: "Knaut, Kaufmann"
如何检查对象是否具有以addr
开头的属性名称?我想象以下的内容应该是:
if (e.data[addr*].length) {
我尝试RegExp
和.match()
无济于事。
答案 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') })