Tengo una matriz de 2 objetos [ { bg: 'a', o: 'c' }, {'hg': 'a2', 'oo': 'c3' } ] provenientes de un archivo json. Y quiero comparar cada objeto en la matriz con otro objeto que se parece a esto { fm: 'a', fh: 'b', o: 'a', fe: 'b', ft: 'a', fb: 'c', bg: 'f' } para determinar si este objeto tiene ambos conjuntos de pares clave/valor en cualquiera de los objetos de la matriz json. ¿Cómo puedo comparar estos objetos?
El siguiente enfoque utiliza
Object.entries para proporcionar/acceder a cada par clave-valor de un objeto en su forma de matriz/tupla de [key, value] .
Array.prototype.map para escribir para cada elemento de la matriz el resultado booleano de comparar cada una de sus entradas (pares clave-valor) con un objeto proporcionado adicionalmente.
Array.prototype.every para recuperar el valor booleano de comparar cada una de las entradas de un elemento de matriz (pares clave-valor) con un objeto proporcionado adicionalmente.
const sampleArr = [ { bg: 'a', o: 'c' }, {'hg': 'a2', 'oo': 'c3' } ]; const sampleObj = { fm: 'a', fh: 'b', o: 'a', fe: 'b', ft: 'a', fb: 'c', bg: 'f' }; console.log("### How `Object.entries` works ###"); console.log({ sampleArr }); console.log( "sampleArr[0] => Object.entries(sampleArr[0]) ...", sampleArr[0], " => ", Object.entries(sampleArr[0]) ); console.log( "sampleArr[1] => Object.entries(sampleArr[1]) ...", sampleArr[1], " => ", Object.entries(sampleArr[1]) ); console.log("### Comparison 1 with what was provided by the OP ###"); console.log( sampleArr // create a new array which for each ... .map(item => { // ... `sampleArr` item retrieves/maps whether ... return Object .entries(item) // ... every entry of such an item exists // as entry of another provided object. .every(([key, value]) => sampleObj[key] === value) }) ); sampleArr.push({ o: 'a', ft: 'a', fh: 'b' }); // will match ... maps to `true` value. sampleArr.push({ o: 'a', ft: 'X', fh: 'b' }); // will not match ... maps to `false` value. console.log("### Comparison 2 after pushing two more items into `sampleArr` ###"); console.log({ sampleArr }); console.log( sampleArr // create a new array which for each ... .map(item => { // ... `sampleArr` item retrieves/maps whether ... return Object .entries(item) // ... every entry of such an item exists // as entry of another provided object. .every(([key, value]) => sampleObj[key] === value) }) ); .as-console-wrapper { min-height: 100%!important; top: 0; }