Sustitución condicionada en objetos JSON

publicado por: Anonymous

Tengo un montón de objetos JSON de este tipo.

{
    "FOLIO": "1738163100002",
    "estatus": "ENTREGADA",
    "causa_rechazo": "",
    "mov_solicitado": "CAMBIO DE DOMICILIO",
    "mov_definitivo": "CAMBIO DE DOMICILIO",
    "fecha_tramite": "02/01/2017 08:09:47 a. m.",
    "fecha_rec_cecyrd": "02/01/2017 08:22:48 a. m.",
    "fecha_reg_cecyrd": "02/01/2017 10:08:55 a. m.",
    "fecha_cancelado_mac": "",
    "fecha_rechazado": "",
    "fecha_cancelado_mov_post": "",
    "fecha_alta_pe": "02/01/2017 10:08:09 a. m.",
    "fecha_actual_pe": "02/01/2017 10:08:07 a. m.",
    "fecha_reinc_pe": "",
    "fecha_existoso": "02/01/2017 10:08:09 a. m.",
    "fecha_lote_prod": "02/01/2017 05:01:53 p. m.",
    "fecha_listo_reimp": "",
    "fecha_cpv_creada": "02/01/2017 05:01:40 p. m.",
    "fecha_registrada_mac": "09/01/2017 09:35:05 a. m.",
    "fecha_disponible": "09/01/2017 09:49:48 a. m.",
    "fecha_entregada": "23/01/2017 08:53:56 a. m.",
    "fecha_afecta_ln": "23/01/2017 10:44:24 a. m."
}

Quiero cambiar las fechas porque la terminación actual a. m. y p. m. me causa problemas para procesar el archivo en diferentes operaciones.

Para recorrer el objeto uso el método forEach() de lodash

_.forEach(tramite, (valor, clave) => {
  console.log(valor)
})

Mi problema es que no sé como buscar y reemplazar con JavaScript.

Para buscar, quiero usar esta expresión:

(([a|p]). m.)

Esta crea dos grupos, el primero puede contener a. m. o p. m. y el grupo dos, solo contiene la a o la p.

De modo que quiero que cuando el grupo 2 ==='a' se sustituya todo el grupo 1 por AM. Obvio, usar PM cuando el grupo 2 sea ==='p'.

Pregunta

Como puedo sustituir en JavaScript a. m. por AM y p. m. por PM. Quisiera aprender a usar el operador ternario (creo que es A ? B : C).

Nota

  • Si tienen alguna alternativa, y si tienen tiempo, le ruego que la expliquen de la forma mas didáctica posible.
  • También me gustaría que, si me proponen alguna alternativa, consideren el desempeño del script, por ejemplo el archivo de pruebas tiene 40 mil registros, lo que haría un poco mas de medio millón de sustituciones.

solución

Lodash tiene un metodo de replace según la documentación.

Documentación lodash

Te pongo un jsfiddle con un ejemplo de como hacerlo, espero sea de tu ayuda.

jsfiddle

Es lo que se hace para el replace

El loop recorre el objeto, se ocupa el método de lodash _.includes que retorna true o false para evaluar un string en común en este caso el valor del objeto, se ocuparon los operadores ternarios que no es más que una estructura de control parecida a if y else por lo tanto se pone la primera condición a evaluar que traducido en if else queda de esta manera: dónde ? es if y : es else.

If Else

_.forEach(data, (valor, clave) => {
    var final = ''
    if( _.includes(valor, 'a. m.') ){
        final = _.replace(valor, 'a. m.', 'AM');
     }else if(_.includes(valor, 'p. m.')){
        final = _.replace(valor, 'p. m.', 'PM');
     }else{
        final = valor
     }

  console.log(final)
})

Ternario

_.forEach(data, (valor, clave) => {
 var final =  _.includes(valor, 'a. m.') ? _.replace(valor, 'a. m.', 'AM') : _.includes(valor, 'p. m.') ? _.replace(valor, 'p. m.', 'PM') : valor;
  console.log(final)
})
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *