enter image description here

... pero con objetos.

Por ejemplo:

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

result = somethingJavascriptHas.ObjectAnd(one, two);

console.log(result);

Volvería :

{a: false, c: false};

(Estoy interesado en la clave, no en el resto, por lo que descarto el valor del segundo objeto a favor del primero aquí. En mi caso, los valores de los dos objetos siempre serán los mismos, simplemente faltarán algunas de sus entradas o no y Quiero un objeto final que incluya solo las claves (con el valor de la primera clave del objeto) que estén presentes en ambos objetos)

¿es posible?

Para completar, OR, XOR y NOT. (nuevamente asuma la prioridad de los valores para el primer objeto pasado)

0
tatsu 2 mar. 2018 a las 17:58

4 respuestas

La mejor respuesta

Puede usar el Array#reduce funciona en una de las teclas de tus objetos y comprueba si las propiedades de ambos objetos no están indefinidas:

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
Zenoo 2 mar. 2018 a las 15:04
// 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);
0
th3n3wguy 2 mar. 2018 a las 15:06

Solo recorre tus objetos:

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)
2
messerbill 2 mar. 2018 a las 15:03

Como dijiste que solo querías teclas, puedes combinar Object.keys, Array #filter y Object # 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));
0
Juan Mendes 2 mar. 2018 a las 15:21