let Ar=[ { info:{ name:"Sai", age:24 }, grade:'A' }, { name:"Satish", grade:'B', info:{ place:"Hyd", company:'Company1' }, info2:{ place2:"Hyderabad", company2:'Company2' } }]
**La salida debe ser solo pares de valores clave **
[ { "name": "Sai", "age": 24, "grade": "A" }, { "name": "Satish", "grade": "B", "place": "Hyd", "company": "Company1", "place2": "Hyderabad", "company2": "Company2" } ] How we can get only key value pairs form the object and nested object* La solución actual que tengo es esta. Pero, ¿tenemos un código más optimizado para obtener los únicos pares de valores clave de un objeto? He usado los métodos Object.keys(obj) y Object.entries(obj) para lograr *
let fr=Ar.map((A)=>{ let test=[]; let en= Object.keys(A).map((item) => { if (typeof A[item] === "object") { Object.entries(A[item]).map((i)=>{test.push(i)}) } else { return test.push([item, A[item]]); } }); return test; }) let finalAnswer=fr.map((item)=>{ return Object.fromEntries(item) }) console.log("Spread Print",finalAnswer)¿Hay alguna solución mejor que yo?
Puedes usar esto
let fr=Ar.map((A)=>{ let test={}; Object.keys(A).forEach((item) => { if (typeof A[item] === "object") { test={...test,...A[item]}; } else { test[item]=A[item] } } return test });
La siguiente puede ser una posible solución (usando la recursividad) para lograr el objetivo deseado.
Tenga en cuenta que si hay claves duplicadas en niveles anidados, solo se conservará el último/último par clave-valor.
Fragmento de código
// recursive method to transform nested objects const recTxf = parm => { if (Array.isArray(parm)) { // if key-value pair array const [k, v] = parm; // either recurse to nested, or return key-value pair if (typeof v === 'object') return recTxf(v); else return { [k]: v }; } else return { // otherwise, it is object ...Object.entries(parm) // iterate over key-value pairs .reduce( (acc, itm) => ({ // use "reduce" to accumulate/aggregate ...acc, ...recTxf(itm) // aggregate results of the recursive calls }), {} ) }; }; // method to iterate over the array const myTransform = arr => arr.map(ob => recTxf(ob)); let Ar = [ { info: { name: "Sai", age: 24 }, grade: 'A' }, { name: "Satish", grade: 'B', info: { place: "Hyd", company: 'Company1' }, info2: { place2: "Hyderabad", company2: 'Company2' } } ]; console.log(myTransform(Ar)); .as-console-wrapper { max-height: 100% !important; top: 0 }Explicación
Los comentarios en línea se proporcionan en el fragmento anterior.