Había publicado esta pregunta anteriormente, pero alguien eliminó ¿Cómo puedo acceder y procesar objetos anidados, matrices o JSON? como posible respuesta. Esto no me está ayudando ya que a) La clave 'fecha' se distribuye en varios nombres, b) Los objetos se componen de matrices y objetos y c) La profundidad a la que está presente la clave 'fecha' puede cambiar.
Por lo tanto, publique la pregunta nuevamente.
Tengo un objeto JS como se muestra a continuación.
const bb = { Harry: { details: [ { cat: "Life", values: [ { date: "2021-08-02", level: 77.6, }, { date: "2021-08-03", level: 79.1, }, ], }, ], }, Barry: { details: [ { cat: "Logic", values: [ { date: "2021-08-02", level: 77.6, }, { date: "2021-08-03", level: 79.1, }, ], }, ], }, };También tengo una variable definida para analizar las fechas const dateParse = d3.timeParse("%Y-%m-%d")
Quiero analizar todas las fechas en el objeto. Dado que la 'fecha' está unos niveles por debajo en el objeto, no puedo resolver esto. ¿Cómo lo hago?
La salida esperada es
const bb = { Harry: { details: [ { cat: "Life", values: [ { date: Mon Aug 02 2021 00:00:00 GMT+0530 (India Standard Time), level: 77.6, }, { date: Tue Aug 03 2021 00:00:00 GMT+0530 (India Standard Time), level: 79.1, }, ], }, ], }, Barry: { details: [ { cat: "Logic", values: [ { date: Mon Aug 02 2021 00:00:00 GMT+0530 (India Standard Time), level: 77.6, }, { date: Tue Aug 03 2021 00:00:00 GMT+0530 (India Standard Time), level: 79.1, }, ], }, ], }, };Solo tiene que recorrer los objetos, seleccionar el nodo de fecha y ejecutar
(new Date(datestring)).toString()
Esto generará la fecha como se especifica en su salida.
const bb = { Harry: { details: [{cat: "Life",values: [{date: "2021-08-02",level: 77.6},{date: "2021-08-03",level: 79.1}]}]},Barry: {details: [{cat: "Logic",values: [{date: "2021-08-02",level: 77.6},{date: "2021-08-03",level: 79.1}]}]}}; Object.values(bb).forEach((value) => { value.details.forEach((detail) => { detail.values.forEach((value) => { value.date = (new Date(value.date)).toString(); }) }) }); console.log(bb);Si desea analizar todas las claves de date anidadas, puede hacerlo recursivamente utilizando las siguientes funciones
const bb = { Harry: { details: [{cat: "Life",values: [{date: "2021-08-02",level: 77.6},{date: "2021-08-03",level: 79.1}]}]},Barry: {details: [{cat: "Logic",values: [{date: "2021-08-02",level: 77.6},{date: "2021-08-03",level: 79.1}]}]}}; function traverseArray(inputArray) { for (const arrayValue of inputArray) { traverseObject(arrayValue); } } function traverseObject(inputObject) { for (const key in inputObject) { const value = inputObject[key]; const valueType = typeof(value); if (valueType == "object") { traverseObject(value); } else if (valueType == "array") { traverseArray(value); } else if (key == "date") { // since I want to parse only date keys inputObject[key] = 'd3.timeParse("%Y-%m-%d") - Parse date here'; } } } traverseObject(bb); console.log(bb);