1
let Ar=[
{
      info:{
          name:"Sai",
          age:24
      },
    grade:'A'
},    
{
    name:"Satish",
    grade:'B',
    info:{
        place:"Hyd",
        company:'Company1'
    },
    info2:{
        place2:"Hyderabad",
        company2:'Company2'
    }
}

]

**Output should be key values pairs only **

[
    {
        "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

*Current solution I have like this But do we have more optimized code to get the only key value pairs from an object. I have used Object.keys(obj) and Object.entries(obj) methods to achieve *

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)

Is there any better solution than me?

2

2 Answers 2

1

You can use this

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 });

Sign up to request clarification or add additional context in comments.

Comments

1

The below may be one possible solution (using recursion) to achieve the desired objective.

Please note that if there are duplicate keys in nested levels, only the latest/last key-value pair will be retained.

Code Snippet

// 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 }

Explanation

Inline comments are provided in the snippet above.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.