Ich habe ein Objekt, das so tief wie möglich geschachtelt werden könnte. Ich versuche festzustellen, ob die Objekteigenschaft ready
mindestens einen falschen Wert hat. Wenn ja, sollte die checkForFalse
Funktion false zurückgeben. Ich wurde verwirrt, während ich Rekursion benutzte, um dieses Problem zu lösen. Welcher Rekursionsaufruf sollte zurückkehren, damit dieser Code funktioniert? Oder ich liege völlig daneben und verpasse etwas?Rekursionsfehler beim Überprüfen der Objekteigenschaften
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>
Was speziell ist das Problem? Was ist der Output gegenüber dem, was Sie erwarten? – Carcigenicate
Ich erwarte, dass console.log die Ausgabe 'false' hat, wenn eine der Objekteigenschaften 'ready' den Wert 'false' hat. Jetzt bekomme ich immer 'falsche' Konsole geloggt – tawreon
Nur eine Beobachtung. Sie haben eine Funktion namens 'checkForFalse', die Sie' false' zurückgeben möchten, wenn ein false vorliegt. Für mich ist das ein sehr irreführender Funktionsname. Ohne zu wissen, was die Funktion getan hat, würde ich mit ihrem Namen erwarten, dass 'checkForFalse'' true' zurückgeben würde, wenn ein 'false' gefunden würde. – Keith