javascript - 如何使用 AngularJS 过滤器捕获 null、undefined、空白值

标签 javascript angularjs if-statement angularjs-filter

我正在尝试编写一个在网格中使用的过滤器,该过滤器将捕获所有 null、未定义、空白字符串或其他类似值并显示破折号“-”。到目前为止我已经写了以下内容,但它没有捕获空值,我想知道它是否可以更简洁并且可能重构以避免三层嵌套的 if/else 语句。需要检查百分比值是否大于 0 且小于 1。此外,负数和 0 应按原样返回。谢谢!

angular.module('AdverseEventsExplorer.main').filter('emptyCellFilter', function ($filter) {
    return function (input, cellFilter, args1, args2) {    

        if (cellFilter == undefined) {
            return (angular.isNumber(input) || angular.isDefined(input) && input.length > 0) ? input : '-';
        } else {
            if (cellFilter.match(/pctg|percent|pctgFilter|incidence/ig)) {
                return (input > 0 && input < 1.0000000) ? $filter(cellFilter)(input, args1, args2) : '-';
            } else {
                return (angular.isNumber(input) || angular.isDefined(input) && input.length > 0) ? input : '-';
            }
        }

    };
});

2.0 版考虑了@tymeJV 的评论:

angular.module('AdverseEventsExplorer.main').filter('emptyCellFilter', function ($filter) {
    return function (input, cellFilter, args1, args2) {

        if (!cellFilter) {
            return (angular.isNumber(input) || (input)) ? input : '-';
        } else {
            if (cellFilter.match(/pctg|percent|pctgFilter|incidence/ig)) {
                return (input > 0 && input < 1.0000000) ? $filter(cellFilter)(input, args1, args2) : '-';
            } else {
                return (angular.isNumber(input) || (input)) ? $filter(cellFilter)(input, args1, args2) : '-';
            }
        }

    };
});

最佳答案

每当您遇到一个变得过于复杂而无法重构的函数时,请尝试将一些较小的语句提取到简洁命名的变量中。它使我们的大脑更容易跟踪功能的需求,并且对于阅读您的代码的新开发人员来说也更具可读性。

var inputHasValue = angular.isNumber(input) || input;
if(!inputHasValue){
    return '-';
}
if (!cellFilter) {
    return input;
}

var isPercentageCell = cellFilter.match(/pctg|percent|pctgFilter|incidence/ig);
var valueIsInRange = input > 0 && input < 1;
if(!isPercentageCell || valueIsInRange){
    return $filter(cellFilter)(input, args1, args2);
}
return '-';

关于javascript - 如何使用 AngularJS 过滤器捕获 null、undefined、空白值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30107465/

相关文章:

javascript - jQuery 延迟/ promise

javascript - 如何在angularjs工厂中调用函数

c# - 在 if 语句中检查多个数组是否为 null

java - 如果不执行位置

javascript - Knockout - 在动态元素上绑定(bind)多个变量

javascript - 在 jquery ajax 中传递参数导致未定义

javascript - 可访问性 javascript : make down up arrow keys simulate TAB key

javascript - 跨源问题 AngularJS 在 Eclipse 中的指令

angularjs - Angular 翻译的良好实践

javascript - 如何获取对象的总数组