使用对象的JS布尔逻辑运算

时间:2018-03-02 14:58:31

标签: javascript object boolean-logic boolean-operations

enter image description here

......但是有了对象。

例如:

one = {a: false, c: false, e: false};
two = {a: true, b: false, c: false, d:false};

result = somethingJavascriptHas.ObjectAnd(one, two);

console.log(result);

将返回:

{a: false, c: false};

(我对键很感兴趣,而不是其余的,所以我放弃了第二个对象的值,而不是第一个在这里。在我的情况下,两个对象的值总是相同的,只是它们的一些条目将丢失或不,我想要一个最终对象,其中只包含两个对象中存在的键(具有第一个对象键的值)

这可能吗?

为了完整性,OR,XOR和NOT。 (再次假设第一个传递对象的值的优先级)

4 个答案:

答案 0 :(得分:2)

只需遍历您的对象:



var one = {a: false, c: false, e: false};
var two = {a: true, b: false, c: false, d:false};

var res = {}

for (var o in one) {
   for (var t in two) {
     if (t == o) res[t] = one[t]
   }
}

console.log(res)




答案 1 :(得分:2)

您可以在其中一个对象键上使用Array#reduce函数,并检查两个对象的属性是否未定义:

var one = {a: false, c: false, e: false};
var two = {a: true, b: false, c: false, d:false};

var three = Object.keys(one).reduce((acc, curr) => {
  if(two[curr] !== undefined){
    acc[curr] = one[curr] && two[curr];
  }
  return acc;
}, {});

console.log(three);

答案 2 :(得分:0)

// Your example:
/*one = {a: false, c: false, e: false};
two = {a: true, b: false, c: false, d:false};

result = somethingJavascriptHas.ObjectAnd(a, b);

console.log(result);
// would return :

{a: false, c: false};*/

// Working code:
const one = {a: false, c: false, e: false};
const two = {a: true, b: false, c: false, d:false};

const oneTwoIntersection = Object.keys(one)
  .reduce((currentObj, nextKey) => {
    return !two.hasOwnProperty(nextKey) ? currentObj : Object.assign({}, currentObj, { 
      [nextKey]: one[nextKey] 
    });
  }, {});
  
console.log(oneTwoIntersection);

答案 3 :(得分:0)

由于您说您只想要密钥,因此可以合并Object.keysArray#filterObject#hasOwnProperty

const one = {a: false, c: false, e: false};
const two = {a: true, b: false, c: false, d:false};

const intersection = (a, b) => 
    Object.keys(a).filter(aKey => b.hasOwnProperty(aKey));


console.log(intersection(one, two));