Javascript:比较三个布尔值并返回所有真正的布尔值

时间:2016-08-11 23:48:41

标签: javascript boolean-logic

我有一个方法getPreferredfood()。它获得三个表示不同食物的布尔值。哪一个都是真的,你归还那些。

getPreferredFood: function (){
 var item 1; 
 var item2 ;
 var item3;

 //comparison?

 return "Preferred food is " (whichever item was true)
 }

我不确定如何返回真实的项目。

4 个答案:

答案 0 :(得分:3)

将值存储在对象/地图中:

var options = {
  a: true,
  b: true,
  c: false,
};

使用Object.keys获取名称并使用该数组上的.filter过滤掉false的名称:

Object.keys(options).filter(function(x) {
  return options[x];
});
// ['a', 'b']

答案 1 :(得分:2)

看起来您希望将变量名称用作字符串输出的一部分。这通常不是你想要做的事情。

请考虑改为:

var tags = {
    "vegan": true,
    "non-veg": false,
    "veg": false
};

var true_tags = [];
for (var tag in tags) {
    if (tags[tag] === true) {
        true_tags.push(tag);
    }
}

console.log(true_tags); // will print [ "vegan" ]

答案 2 :(得分:1)



var preferenceValues = {
   'vegan': true,
   'non-veg': false,
   'veg': false
}

function getPreferences(preferenceValues) {
   var preferences = [];

   for(type in preferenceValues) {
      if (preferenceValues[type]) {
          preferences.push(type);
      }
   }

   return 'Person prefers ' + preferences.join(', ') + ' food';
}


console.log(getPreferences(preferenceValues))




答案 3 :(得分:0)

我建议将变量附加到命名空间(例如:api):

     var api={};

    api.vegan= true
    api.non_veg= false
    api.veg = false;

然后,您需要的是遍历此命名空间的属性并过滤真实的命名空间。

'Person prefers  '+Object.keys(api).filter((ky)=>api[ky]).join(',');

如果无法将其添加到命名空间,则默认命名空间为window&然后你需要有一个白名单循环。

样本



var api={};
api.vegan= true;
api.non_veg= false;
api.veg = false;
console.log(
'Person prefers '+ Object.keys(api).filter((ky)=>api[ky]).join(',')
  )