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};

(Меня интересует ключ, а не остальные, поэтому я отбрасываю значение второго объекта в пользу первого. Здесь в моем случае значения двух объектов всегда будут одинаковыми, просто некоторые из их записей будут отсутствовать или нет, и Я хочу конечный объект, который включает только ключи (со значением ключа первого объекта), которые присутствуют в обоих объектах)

Это возможно?

Для полноты ИЛИ, XOR и НЕ. (снова предположите приоритет значений для первого переданного объекта)

0
tatsu 2 Мар 2018 в 17:58

4 ответа

Лучший ответ

Вы можете использовать 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
Zenoo 2 Мар 2018 в 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 Мар 2018 в 15:06

Просто переберите свои объекты:

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 Мар 2018 в 15:03

Поскольку вы сказали, что вам нужны только ключи, вы можете комбинировать Object.keys, Array #filter и объект # 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 Мар 2018 в 15:21