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