JS найти пересечение нескольких объектов (больше чем 2)

помогите JS найти пересечение нескольких объектов (больше чем 2) например для нахождения пересечения 2х объектов есть такой код (ниже) Но подскажите если объектов много ? Наверно через рекурсию, но я не могу найти решение.

const intersection = (firstObject, secondObject) => {
    const newObj = {};
    for (let key in firstObject) { 
        if (key in secondObject && firstObject[key] === secondObject[key]) {
            newObj[key] = firstObject[key];
        }
    }           
    return newObj;
};
const obj1 = { a: 1, b: 2, c: 3 };
const obj2 = { b: 2, a: 2, c: 3 };
console.log(intersection(obj1, obj2));


Ответы (1 шт):

Автор решения: EzioMercer

Не нужно никаких рекурсий, просто по очереди ищем пересечения у объектов:

const objects1 = [
  { a: 1, b: 2, c: 3 },
  { a: 1, b: 2, c: 3 },
  { a: 1, b: 2, c: 3 },
  { a: 1, b: 2, c: 3 },
  { a: 1, b: 2, c: 3 }
];

const objects2 = [
  { a: 1, b: 6, c: 11 },
  { a: 2, b: 7, c: 12 },
  { a: 3, b: 8, c: 13 },
  { a: 4, b: 9, c: 14 },
  { a: 5, b: 10, c: 15 }
];


const intersectionOfTwoObjects = (firstObject, secondObject) => {
    const newObj = {};
    
    for (const key in firstObject) { 
        if (key in secondObject && firstObject[key] === secondObject[key]) {
            newObj[key] = firstObject[key];
        }
    }          
    
    return newObj;
};


const intersection = (objects) => {
  let intersectionObj = objects[0] ?? {};
  
  for (let i = 1; i < objects.length; ++i) {
    // check if intersectionObj is empty object
    if (Object.keys(intersectionObj).length === 0) return intersectionObj;
  
    intersectionObj = intersectionOfTwoObjects(intersectionObj, objects[i]);
  }
  
  return intersectionObj;
}

console.log(intersection(objects1));
console.log(intersection(objects2));

→ Ссылка