如何检查JavaScript对象的属性名是否以特定字符串开头?
假设我有如下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
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') })