¿Cuál es la mejor manera de ver si una fila de datos está dentro de un objeto de JavaScript?
Hice un ejemplo simple abajo.
los datos dentro de la appointment son los mismos que los de la primera fila de upcoming_appointments
upcoming_appointments = [{"DOB":"01-27-2002","name":"Judy, W." ,"PCD":"Dr-S"}, {"DOB":"08-15-1995","name":"John, V." ,"PCD":"Dr-C"}, {"DOB":"07-05-1992","name":"David, C.","PCD":"Dr-S"}, {"DOB":"01-15-2002","name":"Anna, S." ,"PCD":"Dr-J"}, {"DOB":"01-15-2002","name":"Jeff, D." ,"PCD":"Dr-P"}]; appointment = [{"DOB":"01-27-2002","name":"Judy, W." ,"PCD":"Dr-S"}]; if(upcoming_appointments.includes(appointment[0])){ console.log('true'); } else{ console.log('false'); }salida deseada
truesalida de corriente
falseJavaScript no puede comparar objetos en profundidad con la operación de igualdad.
Puede lograr el resultado deseado de varias maneras, pero la más fácil que se me ocurre en este momento es convertir los objetos en cadenas JSON y luego compararlos con la versión "en cadena" de su objeto.
// Function definition function isRecordPresent(record, array) { const jsonRecord = JSON.stringify(record); const jsonArray = array.map(record => JSON.stringify(record)); return jsonArray.includes(jsonRecord); } // Implementation isRecordPresent(appointment[0], upcoming_appointments); En Node.js puedes. Hay un módulo de Nodo incorporado llamado util que brinda un método útil para lo que desea: util.isDeepStrictEqual(a, b)
const util = require('util'); const objA = { a: 1, b: { a: 2, b: 3 } }; const objB = { a: 1, b: { a: 2, b: 3 } }; const objC = { a: 1, b: { a: 2, b: 4 } }; util.isDeepStrictEqual(objA, objB); // true util.isDeepStrictEqual(objA, objC); // falseTendría que comparar los valores de los objetos, ya que si bien pueden parecer iguales, son objetos diferentes.
const upcoming_appointments = [{"DOB":"01-27-2002","name":"Judy, W." ,"PCD":"Dr-S"}, {"DOB":"08-15-1995","name":"John, V." ,"PCD":"Dr-C"}, {"DOB":"07-05-1992","name":"David, C.","PCD":"Dr-S"}, {"DOB":"01-15-2002","name":"Anna, S." ,"PCD":"Dr-J"}, {"DOB":"01-15-2002","name":"Jeff, D." ,"PCD":"Dr-P"}]; const appointment = [{"DOB":"01-27-2002","name":"Judy, W." ,"PCD":"Dr-S"}]; if( upcoming_appointments.some(ua => { for (let k in ua) if (ua[k] !== appointment[0][k]) return !1; return !0; }) ) { console.log('true'); } else { console.log('false'); }