¿Cómo puedo recorrer este objeto (datos) y devolver una matriz de objetos (salida) como este? básicamente con estas propiedades y valores específicos
data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705, } const output = [ { modelId : 10389, id : 164703 }, { modelId : 10388, id : 164704 }, { modelId : 10387, id : 164705 }, ]esto es lo que tengo ahora
Object.keys(data).map(function(key, index) { console.log(data[key]) });o esto
for (const property in data) { console.log(`${property}: ${data[property]}`); }Divide el problema en partes pequeñas:
Array.map para eso[key, value] , podemos usar la desestructuración en el .map para facilitar el acceso.modelId , necesitamos .split la clave y obtener la parte detrás de - , luego analizarla como un número.id es solo el valor. const data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705 }; const result = Object.entries(data) .map(([key, value]) => ({ modelId: parseInt(key.split('-')[1], 10), id: value })); console.log(result); Una alternativa un poco más rápida a split , id para usar una expresión regular para extraer ids:
modelId: parseInt(key.match(/\d+/)[0], 10),Sin embargo, si vamos a ir tan lejos como podamos para optimizar esta transformación, tendremos que hacer algunos cambios más:
+ en lugar de parseInt .for in loop en lugar de Object.entries y .map ..splitEso te dará:
const data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705 }; const result = []; for (let key in data) { result.push({ modelId: +key.match(/\d+/)[0], id: data[key] }); } console.log(result);Object.entries con desestructuración de objetos, sintaxis literal de objetos cortos y + unario para la conversión a número:
const data = {"model-10389": 164703, "model-10388": 164704, "model-10387": 164705}; const output = Object.entries(data).map(([key, id]) => ({ modelId: +key.replace(/.*-/, ""), id })); console.log(output);Si la clave (modelo-*) en los datos no cambia, entonces puede usar substring() con el índice.
const data = { "model-10389": 164703, "model-10388": 164704, "model-10387": 164705 } const result = Object.entries(data) .map(([key, value]) => ({ modelId: +key.substring(6), id: value })); console.log(result)