Tengo una matriz con objetos json. algunos valores de propiedades de objetos que necesito convertir a número de cadena. Necesito enviar json de valor de número convertido a una nueva lista. Intenté usar floatparse pero no tuve éxito. código
var json = [{ "id" : "0", "msg" : "hi", "cost" : "250.24", "discount": "10" }, { "id" : "1", "msg" : "there", "cost" : "45.00", "discount": "0" }]; var json1 = []; for (var key in json) { if (json.hasOwnProperty(key)) { for (const prop in json[key]) { const parsed = parseFloat(json[key][prop]); res[key][prop] = isNaN(parsed) ? json[key][prop] : parsed; // need to push array of modified json object value converted to number from string into json1 } } }Prefiero una solución de mapa:
var json = [{ "id": "0", "msg": "hi", "cost": "250.24", "discount": "10" }, { "id": "1", "msg": "there", "cost": "45.00", "discount": "0" } ]; const json1 = json.map(obj => Object.fromEntries(Object.entries(obj).map(([key, value]) => { const parsedValue = parseFloat(value); return [ key, isNaN(parsedValue) ? value : parsedValue ]; }))); console.log(json1);Sin embargo, para llevarlo de vuelta a los bucles:
var json = [{ "id": "0", "msg": "hi", "cost": "250.24", "discount": "10" }, { "id": "1", "msg": "there", "cost": "45.00", "discount": "0" } ]; const json1 = []; for (const obj of json) { const mappedObj = {}; for (const [key, value] of Object.entries(obj)) { const parsedValue = parseFloat(value); mappedObj[key] = isNaN(parsedValue) ? value : parsedValue; } json1.push(mappedObj); } console.log(json1); var json = [[ {key:"id", value:"0"}, {key:"msg", value:"hi"}, {key:"cost", value:"250.24"}, {key:"discount", value:"10"} ], [ {key:"id", value:"1"}, {key:"msg", value:"there"}, {key:"cost", value:"45.00"}, {key:"discount", value:"0"} ] ]; const json1 = json.map(obj => obj.map(({key, value}) => { const parsedValue = parseFloat(value); return { key, value: isNaN(parsedValue) ? value : parsedValue }; })); console.log(json1);tu bucle está mal.
for (var key in json) => cuando usa un bucle sobre una array , es el índice del item de retorno, no la clave
json.hasOwnProperty(key) => su json es una array que no necesita usar hasOwnProperty es para object
Te escribí de 2 maneras:
*: puede usar + para convertir una string en un number .
*: si desea recorrer las claves de los elementos, puede usar way1 , verifique Object.entries , Object.keys , Object.values .
const json = [{ "id" : "0", "msg" : "hi", "cost" : "250.24", "discount": "10" }, { "id" : "1", "msg" : "there", "cost" : "45.00", "discount": "0" }]; //way1 const json1 = json.map((item)=>{ return Object.entries(item).reduce((pre,[key,value])=>{ const parsed = +value pre[key] = isNaN(parsed) ? value : parsed return pre },{}) }) console.log('json1',json1) //way2 const json2 = json.map((item)=>{ return { "id": +item.id, "msg": item.msg, "cost": +item.cost, "discount": +item.discount, } }) console.log('json2',json2)