将条件组合成单个IF

时间:2016-01-18 13:36:26

标签: angularjs

我当前的代码有以下条件检查。

if(
    angular.equals({},obj1) &&
    angular.equals({},obj2) &&
    angular.equals({},obj3) &&
    angular.equals({},obj4)
){
    return true;
}else {
    return false;
}

没有为4个对象编写这4个条件,这个选项有没有任何捷径可以减少verbos?因为这样,如果引入了另外一个对象obj5,那么我需要再添加一行。

2 个答案:

答案 0 :(得分:0)

将对象放入数组中 - 并对数组运行.every检查:

function isEmptyObjs(arrayOfObjs) {
    //If every element in the array is an empty object, returns true
    return arrayOfObjs.every(function(obj) { 
        return angular.equals({}, obj); 
    });
}

用法:

var areObjectsEmpty = isEmptyObjs([{}, {x: 1}, {}]); //returns false
var areObjectsEmpty2 = isEmptyObjs([{}, {}, {}]); //returns true

答案 1 :(得分:0)

另一个选择就是使用extend。它更具可读性,但(imho)代码的意图有点模糊:

if(angular.equals({},angular.extend({},obj1,obj2,obj3,obj4)) { return true; }

仍然......代码更简单,对吧? extend会快乐地从所有这些对象添加属性到{}然后返回一个不相等的。我会说这会慢一点,但你正在使用&& - 所以你在你的&&amp ;;中做同样类型的重载代码的版本。