web-dev-qa-db-fra.com

Vérifier si un objet Javascript a un nom de propriété qui commence par une chaîne spécifique

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.

12
Alexander Rutz

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.

26
Amit Joki

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.

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

Object.keys(obj).some(function(prop){
  return ~prop.indexOf('add')
}) //true
2
Edwin Reynoso

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;
    }
}
0
Krzysztof Trzos

Vous pouvez écrire une fonction 

function check(model) {
   var keys = [];
   for (key in model) { 
       if(key.indexOf("addr") > -1) 
           keys.Push(key); 
   }
   return keys;
}
0
Mahib

Pourquoi pas juste

var foo = {'bar':'funtimes'};
if (foo.bar.includes('fun')) {
  console.log('match');
}

0
Bwyss

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 ...

0
Spock