在这种情况下,比较两个对象布尔值的更好方法是什么?

时间:2017-11-06 08:28:50

标签: javascript ecmascript-6

撰写此声明的更好方法是什么?虽然这有效。我觉得有一种更为简洁的方式。优选ES6方法。

var show = [
    {
        name: 'Active',
        slug: 'active',
        enabled: true
    },
    {
        name: 'Inactive',
        slug: 'inactive',
        enabled: true
    }
]

var isActive = null;

if (show[0].enabled && show[1].enabled) {
    isActive = null; // if both true
} else if (show[0].enabled) {
    isActive = true; // if only active is true
} else if (show[1].enabled) {
    isActive = false; // if only inactive is true
}

https://jsfiddle.net/udL7ob72/1/

3 个答案:

答案 0 :(得分:2)

您可以使用

var isActive = show[0].enabled != show[1].enabled // if exactly one is true
                 ? show[0].enabled // same as !show[1].enabled
                 : null;

但是我建议不要使用可以为空的布尔变量。

function getActive(show) {
  var isActive = show[0].enabled != show[1].enabled // if exactly one is true
               ? show[0].enabled // same as !show[1].enabled
               : null;
  console.log(show[0].enabled, show[1].enabled, isActive)
  return isActive;
}
getActive([{enabled: true},{enabled: true}]);
getActive([{enabled: false},{enabled: true}]);
getActive([{enabled: true},{enabled: false}]);
getActive([{enabled: false},{enabled: false}]);

答案 1 :(得分:1)

您可以采用三元组并检查值是否相等,返回null,否则只是show[0].enabled的值。

  

真相表

  [0]      [1]     result
-------  -------  --------
 false    false     null
 false    true      false
 true     false     true
 true     true      null
var isActive = show[0].enabled === show[1].enabled
        ? null
        : show[0].enabled;

答案 2 :(得分:-3)

试试这个

(show[0].enabled && !show[1].enabled) || (!show[0].enabled && show[1].enabled ? false : null );

<强>演示

console.log( "true false -> ",  getIsActive( [{"enabled":true},{"enabled":false}] ) );
console.log( "false false -> ", getIsActive( [{"enabled":false},{"enabled":false}] ) );
console.log( "true true -> ", getIsActive( [{"enabled":true},{"enabled":true}] ) );
console.log( "false true -> ", getIsActive( [{"enabled":false},{"enabled":true}] ) );

function getIsActive( show )
{
  return (show[0].enabled && !show[1].enabled) || (!show[0].enabled && show[1].enabled ? false : null );
}