J'ai un objet qui pourrait être imbriqué aussi profondément que possible. J'essaie de déterminer si la propriété de l'objet ready
a au moins une valeur false. Si c'est le cas, la fonction checkForFalse
doit renvoyer false. J'ai été confus en utilisant la récursion pour résoudre ce problème. Quel appel récursif devrait retourner pour faire fonctionner ce code? Ou je me trompe complètement et manque quelque chose?Recursion mess en vérifiant les propriétés de l'objet
var obj = {
"currentServiceContractId": {
"ready": true,
"customerPersonId": {
"ready": false
}
},
"siteId": {
"ready": true
},
"districtId": {},
"localityId": {
"ready": true
},
"streetId": {
"ready": true
}
};
function checkForFalse(mainObj) {
let ans = _.find(mainObj || obj, (val) => {
if (_.keys(val).length > 1) {
let readyObj = _.pick(val, 'ready');
return checkForFalse(readyObj);
} else {
return _.get(val, 'ready') === false;
}
});
return _.isEmpty(ans);
}
console.log(checkForFalse(obj));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
Quel est précisément le problème? Quelle est la sortie par rapport à ce que vous attendez? – Carcigenicate
Je m'attends à avoir console.log pour sortir 'false' si l'une des propriétés de l'objet nommée' ready' a la valeur 'false'. Maintenant, je reçois toujours la console 'false' enregistrée – tawreon
Juste une observation. Vous avez une fonction nommée 'checkForFalse' que vous voulez retourner' false' s'il y a un faux. Pour moi, c'est un nom de fonction très trompeur. Sans savoir ce que la fonction faisait, je m'attendais par son nom à ce que 'checkForFalse' renvoie' true' si a trouvé un 'false'. – Keith