2014-12-16 30 views

risposta

19

È possibile controllare contro le chiavi dell'oggetto utilizzando Array.some che restituisce un bool.

if(Object.keys(obj).some(function(k){ return ~k.indexOf("addr") })){ 
    // it has addr property 
} 

Si potrebbe anche usare Array.filter e verificare la sua lunghezza. Ma Array.some è più adatto qui.

+0

Saluti a tutti! Questo sembra essere il modo più breve ed elegante per farlo. –

+6

puoi sbarazzarti di **> -1 ** inserendo "~" di fronte a ** k.indexOf ....... ** –

+0

@Edwin, grazie. Non lo sapevo :) –

0

Prova questo:

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

È possibile utilizzare la funzione Object.keys per ottenere un array di chiavi e quindi utilizzare il metodo filter per selezionare solo le chiavi che iniziano con "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"]; 

Questo ti dà esistenza (propertyNames.length > 0) ei nomi specifici delle chiavi, ma se avete solo bisogno di testare per l'esistenza si può semplicemente sostituire filter con some.

2
Obj = {address: 'ok', x:5} 

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

Non penso che "Querying" di proprietà di un oggetto sia possibile. Dovresti scorrere le proprietà singolarmente e determinare se corrispondono. qualcosa di simile ...

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')); 

È quindi possibile elaborare la proprietà se findProp restituisce true ...

0

È possibile scrivere una funzione

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