Babak
Babak

Reputation: 71

How to nest element of an object inside the same object in javascript?

I created a form to get some info from User, and I want to move some of their info into a nested object. the reason why is to better organize my data later in front-end.

As a simple example, how to create the following "newInfo" out of "oldInfo" in JavaScript?

oldInfo = {
  name: 'John',
  Age: '32',
  friend1: 'Michael',
  friend2: 'Peter',
};

newInfo = {
  name: 'John',
  Age: '32',
  friends: {
    friend1: 'Michael',
    friend2: 'peter',
  },
};

I'm sure this must be a repeated and simple topic, but I couldn't find any as I didn't know what keyword to search for.

Upvotes: 0

Views: 397

Answers (3)

Ramesh Reddy
Ramesh Reddy

Reputation: 10662

If you have a dynamic number of friend: name key-value pairs and other properties that shouldn't be nested into friends then you can use Object.entries and reduce:

const oldInfo = {
  name: 'John',
  Age: '32',
  friend1: 'Michael',
  friend2: 'Peter',
};

const newInfo = Object.entries(oldInfo).reduce((acc, [k, v]) => {
  if(k.startsWith('friend')) {
    acc.friends ? acc.friends[k] = v : acc.friends = {[k]: v};
  } else {
    acc[k] = v;
  }
  return acc;
},{});

console.log(newInfo);

Upvotes: 0

andsilver
andsilver

Reputation: 5972

You can do this easily with spread operator:

const { name, Age, ...friends } = oldInfo;
newInfo = { name, Age, friends };

It simply extracts all fields except name and age as friends.

Example:

const oldInfo = {
  name: 'John',
  Age: '32',
  friend1: 'Michael',
  friend2: 'Peter',
};
const { name, Age, ...friends } = oldInfo;
const newInfo = { name, Age, friends };
console.log(newInfo);

Upvotes: 2

hgb123
hgb123

Reputation: 14891

You could explicitly assign it

const oldInfo = {
  name: "John",
  Age: "32",
  friend1: "Michael",
  friend2: "Peter",
}

const newInfo = {
  name: oldInfo.name,
  Age: oldInfo.Age,
  friends: {
    friend1: oldInfo.friend1,
    friend2: oldInfo.friend2,
  },
}

console.log(newInfo)

Upvotes: 2

Related Questions