【发布时间】:2017-10-18 21:32:59
【问题描述】:
我有一个可以嵌套尽可能深的对象。我试图确定对象的属性ready 是否至少有一个错误值。如果是这样,checkForFalse 函数应该返回 false。我在使用递归来解决这个问题时感到困惑。应该返回什么递归调用才能使此代码正常工作?还是我完全错了,遗漏了什么?
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>
【问题讨论】:
-
具体是什么问题?输出与您的期望是什么?
-
如果任何名为
ready的对象属性具有false值,我希望console.log 输出false。现在我总是收到false控制台记录 -
只是一个观察。你有一个名为
checkForFalse的函数,如果有错误,你想返回false。对我来说,这是一个非常具有误导性的函数名称。在不知道该函数做了什么的情况下,我预计如果找到false,checkForFalse将返回true。 -
@Keith 是对的。像
checkForAllReady这样的东西会更好地反映该方法背后的想法。
标签: javascript object recursion lodash traversal