tengo objeto:
const salary = { netto: { min: '700.', max: '', }, brutto: { min: '', max: '', }, } Quiero iterar a través del objeto y devolver una matriz de objetos que se verían como [{name: 'netto_min', value: '700'},...etc] omitiendo claves con valor vacío.
Lo intenté:
const result = Object.keys(salary).map(type => Object.keys(salary[type]).map(entry => { if(salary[type][entry] !== ''){ return {name: `${type}_${entry}`, value: parseInt(salary[type][entry]).toString()} } }) ) Me consiguió: [[{name: 'netto_min', value: '700'}, undefined],[undefined, undefined]] ¿Cómo puedo obtener [{name: 'netto_min', value: '700'}] en su lugar?
const salary = { netto: { min: "700.", max: "" }, brutto: { min: "", max: "" } }; let result = Object.keys(salary).map(k => { return Object.keys(salary[k]).map(r => ({ name: `${k}_${r}`, value: parseInt(salary[k][r]) })) }).flat().filter( b => !isNaN(b.value))Devoluciones
[ { name: 'netto_min', value: 700 } ] Supongo que el 700. fue un error tipográfico en 700 , fácilmente eliminado
Podrías hacer esto:
const salary = { netto: { min: '700.', max: '', }, brutto: { min: '', max: '', }, } let result = [] for (type in salary) { for (entry in salary[type]) { let obj = {} let value = salary[type][entry] if (value) { obj.name = `${type}_${entry}` obj.value = parseInt(value).toString() result.push(obj) } } } console.log(result)Obtenga las claves, luego filtre esa matriz si esa clave no está vacía. luego repita, empújelo a la matriz y devuélvalo.
const salary = { netto: { min: '700.', max: '', }, brutto: { min: '', max: '', }, }; var non_empty_salaries = Object.keys(salary).map(name => { var keys = Object.keys(salary[name]); var non_empty = keys.filter(key => salary[name][key] != ''); var non_emptys = []; for (let key of non_empty) { non_emptys.push({ name: `${name}_${key}`, value: salary[name][key] }); } return non_emptys; }); console.log(non_empty_salaries);