Por ejemplo, quería comparar debajo de 2 JSON y obtener el valor de retorno con un par de valores de clave JSON comunes.
JSON1 = [{ "info" : { "name": "xyz" }, "add" : "london", "no" : 1234, "gender" : "male" }]Otro JSON es :
JSON2 = [{ "info" : { "name": "abc" }, "add" : "london", "no" : 2456 }]Necesita el valor de retorno como JSON como se muestra a continuación con valores comunes, pero la diferencia debe estar vacía.
json3 = [{ "info" : { "name": "" }, add : "london", no : "", gender : male }]Podría crear una función combineObjects() que combine objetos de entrada de forma recursiva.
Enumeraremos las claves de los objetos de entrada y luego devolveremos un valor vacío para cada propiedad si los valores no son los mismos para las dos entradas.
Si los valores son los mismos o faltan en cualquiera de los objetos, devolveremos el valor de la propiedad obj1 u obj2.
const json1 = [{ "info" : { "name": "xyz" }, "add" : "london", "no" : 1234, "gender" : "male" }]; const json2 = [{ "info" : { "name": "abc"}, "add" : "london", "no" : 2456 }]; function combineObjects(obj1, obj2) { const result = {}; // Get all keys... let keys = [...new Set([...Object.keys(obj1), ...Object.keys(obj2)])]; for(let k of keys) { if (obj1[k] && obj2[k] && typeof(obj1[k]) === 'object') { result[k] = combineObjects(obj1[k], obj2[k]); } else if (obj1[k] === obj2[k]) { result[k] = obj1[k]; } else { result[k] = (obj1[k] && obj2[k]) ? '' : obj1[k] || obj2[k]; } } return result; } const result = combineObjects(json1, json2); console.log('Result:', result) .as-console-wrapper { max-height: 100% !important; } <script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.3.1/luxon.min.js" integrity="sha512-Nw0Abk+Ywwk5FzYTxtB70/xJRiCI0S2ORbXI3VBlFpKJ44LM6cW2WxIIolyKEOxOuMI90GIfXdlZRJepu7cczA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>