Quiero filtrar los pares de valores clave que son comunes en ambos objetos. Hay dos objetos:
first = {a:3 , b:4} second = {a:5 , b:4}Usé el siguiente código para resolver esto:
c = {} for (const key of Object.keys(first)) { for( const k of Object.keys(second)){ if ( key == k){ if (first[key]==second[k]){ c[key] = first[key] } } } }Esto funciona bien y me da la salida {b:4}, pero para los valores de entrada de prueba a continuación, obtengo un objeto vacío como salida, no estoy seguro de cómo verificar los valores que son comunes pero no iguales.
first = {a: 3, b: {x:7}}; second = {a: 4, b: {x: 7, y: 10}}Aquí la salida debería ser:
{b: {x:7}}Puede adoptar un enfoque recursivo para los objetos anidados y verificar las claves y los valores comunes o, si ambos valores son objetos, tomar los valores comunes de los objetos anidados.
function getCommon(a, b) { const isObject = o => typeof o === 'object'; return Object.fromEntries(Object .keys(a) .filter(Set.prototype.has, new Set(Object.keys(b))) .filter(k => a[k] === b[k] || isObject(a[k]) && isObject(b[k])) .map(k => [k, isObject(a[k]) ? getCommon(a[k], b[k]) : a[k]]) ); } console.log(getCommon({ a: 3, b: { x: 7 } }, { a: 4, b: { x: 7, y: 10 } }));