Disons que j'ai des objets javascript comme celui-ci:
addr:housenumber: "7"
addr:street: "Frauenplan"
owner: "Knaut, Kaufmann"
Comment puis-je vérifier si l'objet a un nom de propriété qui commence par addr
? J'imagine que quelque chose comme ce qui suit devrait soit possible:
if (e.data[addr*].length) {
J'ai essayé RegExp
et .match()
en vain.
Vous pouvez le comparer aux clés de l'objet à l'aide de Array.some
qui renvoie bool
.
if(Object.keys(obj).some(function(k){ return ~k.indexOf("addr") })){
// it has addr property
}
Vous pouvez également utiliser Array.filter
et vérifier sa longueur. Mais Array.some
est plus approprié ici.
Vous pouvez utiliser la fonction Object.keys
pour obtenir un tableau de clés, puis utiliser la méthode filter
pour sélectionner uniquement les clés commençant par "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"];
Cela vous donne l'existence (propertyNames.length > 0
) et les noms spécifiques des clés, mais si vous devez simplement tester l'existence, vous pouvez simplement remplacer filter
par some
.
Obj = {address: 'ok', x:5}
Object.keys(obj).some(function(prop){
return ~prop.indexOf('add')
}) //true
Essaye ça:
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;
}
}
Vous pouvez écrire une fonction
function check(model) {
var keys = [];
for (key in model) {
if(key.indexOf("addr") > -1)
keys.Push(key);
}
return keys;
}
Pourquoi pas juste
var foo = {'bar':'funtimes'};
if (foo.bar.includes('fun')) {
console.log('match');
}
Je ne pense pas que "l'interrogation" des propriétés d'un objet est possible. Vous devez parcourir les propriétés individuellement et déterminer si elles correspondent. quelque chose comme ça...
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'));
Vous pouvez ensuite traiter la propriété si findProp renvoie true ...