J'essaie de rechercher un nom de propriété dans un json et de renvoyer sa valeur si la propriété peut être trouvée, ou null dans le cas contraire.
function returnValueAtProperty(string, exampleObject) {
for (ch1 in exampleObject) {
if (ch1 === string) {
return exampleObject[ch1];
} else if (typeof(exampleObject[ch1]) == 'object') {
var ob = exampleObject[ch1]
for (ch2 in ob) {
return returnValueAtProperty(string, ob[ch2])
}
} else if (Array.isArray(exampleObject[ch1])) {
var arr = exampleObject[ch1];
for (var i = 0; i < arr.length;) {
return returnValueAtProperty(string, arr[i])
}
}
}
}
var exampleObject = {
"key0": 42,
"key1": {
"key2": [{
"key3": "tag",
"key4": false
},
{
"key5": null,
"key6": [3, 141]
}
],
"key7": null
}
}
console.log(returnValueAtProperty("key3", exampleObject));
La fonction doit renvoyer la chaîne "tag". ou si j'appelle la fonction comme returnValueAtProperty ("key6", exampleObject), elle devrait renvoyer le tableau
4 Réponses :
Je viens de changer un peu votre code Je crois que si vous changez la vérification du tableau avant la vérification de l'objet, ce sera mieux, en javascript même un type de tableau peut renvoyer un objet si probable que les tableaux son pénétrer dans le premier sinon si ci-dessous je vous montre le changement de code que j'ai fait
for(ch1 in exampleObject){
if(typeof ch1 === string){
return exampleObject[ch1];
} else if(Array.isArray(exampleObject[ch1])){
var arr = exampleObject[ch1];
for(var i=0; i<arr.length;){
return returnValueAtProperty(string,arr[i])
}
}
else if(typeof(exampleObject[ch1])=='object'){
var ob = exampleObject[ch1]
for(ch2 in ob){
return returnValueAtProperty(string, ob[ch2])
}
}
}
Vous pouvez prendre une seule boucle et renvoyer n'importe quelle valeur, du moment qu'elle n'est pas null.
function getValue(object, key) {
var k, temp;
if (key in object) return object[key];
for (k in object) {
if (object[k] && typeof object[k] === 'object') {
temp = getValue(object[k], key);
if (temp !== undefined) return temp;
}
}
}
var object = { key0: 42, key1: { key2: [{ key3: "tag", key4: false }, { key5: null, key6: [3, 141] }], key7: null } };
console.log(getValue(object, "key3"));
console.log(getValue(object, "key6"));
console.log(getValue(object, "key7"));
console.log(getValue(object, "foo"));
Une approche légèrement meilleure en prenant undefined comme valeur non existante.
function getValue(object, key) {
var k, temp;
if (key in object) return object[key]; // if found return value
for (k in object) { // iterate keys
if (object[k] && typeof object[k] === 'object') { // check not null and object
temp = getValue(object[k], key); // get sub value, if exists
if (temp !== null) return temp; // if not null return value
}
}
return null;
}
var object = { key0: 42, key1: { key2: [{ key3: "tag", key4: false }, { key5: null, key6: [3, 141] }], key7: null } };
console.log(getValue(object, "key3"));
console.log(getValue(object, "key6"));
console.log(getValue(object, "key7"));
console.log(getValue(object, "foo"));
@jujiyangasli, quel est le problème où vous avez une réponse?
Vous y avez fait quelques erreurs triviales.
Vérifiez ceci:
function returnValueAtProperty(string, exampleObject) {
for (ch1 in exampleObject) {
if (ch1 === string) {
return exampleObject[ch1];
} else if (typeof(exampleObject[ch1]) == 'object') {
var ob = exampleObject[ch1];
return returnValueAtProperty(string, ob);
} else if (Array.isArray(exampleObject[ch1])) {
var arr = exampleObject[ch1];
for (var i = 0; i < arr.length;++i) {
return returnValueAtProperty(string, arr[i])
}
}
}
}
var exampleObject = {
"key0": 42,
"key1": {
"key2": [{
"key3": "tag",
"key4": false
},
{
"key5": null,
"key6": [3, 141]
}
],
"key7": null
}
}
console.log(returnValueAtProperty("key3", exampleObject));
Désolé pour la réponse tardive! Cela fonctionne pour cette clé, mais si je la change avec 'key5' par exemple, cela ne fonctionne pas!
prenez-vous vraiment
nullcomme indicateur pour les valeurs non trouvées, même si vous aveznullcomme valeur à l'intérieur de l'objet?Désolé pour la réponse tardive! Je suis un QA et ce problème a été donné comme un exercice dans un test pour le poste de test d'automatisation