我正在尝试使用lodash函数来查找它是否满足if语句。当代码运行了“ return false”的代码后,它仍然继续执行_find函数,并且未在scope.onToggle中返回结果(布尔值)。
$scope.onToggle = function(disposition) {
if (requiredFieldsEntered()===false){
// if return value from the function is false, alert user
}
}
function requiredFieldsEntered(){
var res = _.find($rootScope.CustomFields,
function(field){
if(field.enabled && field.required){
if(field.table_name === 'session'){
if(!$scope.session.external_id){
console.log(field.column_name);
return false;
}
else if (field.table_name === "session_extension"){
if(!$scope.session.extension|| ($scope.session.extension && !$scope.session.extension[field.column_name])){
console.log(field.column_name);
return false;
}
}
}
}});
if (res) return false;
else return true;
}
答案 0 :(得分:0)
首先让我们停下来考虑一下_.find
的实际作用。它遍历一个数组并返回匹配条件的数组的第一个元素。
_.find([1, 2, 3, 4], function(num) { return num % 2 === 0 });
// returns 2
如果您使用_.find
函数,则将从$rootScope.CustomFields
取回其中一个字段,或者如果没有一个字段从{返回真实值,则从undefined
中取回其中一个字段{1}}。
这是您遇到问题的地方。匿名函数function(field)…
仅返回false。如果发现错误,则需要返回true,否则返回false。
由于您的function(field)…
函数最终尝试返回requiredFieldsEntered()
或true
,因此您可以根据false
函数是否返回来决定返回哪一个一些对象或_.find
。
类似这样的东西:
undefined
快速注意一点,最后一个较短但可读性较差的版本可能会代替以下位置:
$scope.onToggle = function(disposition) {
if (requiredFieldsEntered()===false){
// if return value from the function is false, alert user
}
}
function requiredFieldsEntered(){
const fieldWithErrors = _.find($rootScope.CustomFields,
function(field){
let result = true;
if(field.enabled && field.required){
if(field.table_name === 'session'){
if(!$scope.session.external_id){
console.log(field.column_name);
result = false;
} else if (field.table_name === "session_extension"){
if(!$scope.session.extension|| ($scope.session.extension && !$scope.session.extension[field.column_name])){
console.log(field.column_name);
result = false;
}
}
}
}
return result;
});
if (fieldWithErrors) {
return false;
}
return true;
}
使用:
…
if (fieldWithErrors) {
return false;
}
return true;
}
前两个感叹号会将您的find函数的结果类型转换为…
return !!!fieldWithErrors;
(如果有问题)或true
(如果它返回false
),然后是第三次感叹号如果有错误,point会反转该布尔值以匹配您当前的返回undefined
的方案。
(或者您可以将函数名称更改为false
并返回errorsArePresent
– true
)。