Как вложить элемент объекта в один и тот же объект в javascript? - PullRequest
0 голосов
/ 02 августа 2020

Я создал форму для получения информации от пользователя, и я хочу переместить часть их информации во вложенный объект. причина в том, чтобы лучше организовать мои данные позже во внешнем интерфейсе.

В качестве простого примера, как создать следующий «newInfo» из «oldInfo» в JavaScript?

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

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

Я уверен, что это должен быть повторяющийся и простой топи c, но я не смог найти ни одного, так как не знал, по какому ключевому слову искать.

Ответы [ 3 ]

1 голос
/ 02 августа 2020

Вы можете явно назначить его

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)
1 голос
/ 02 августа 2020

Вы можете легко сделать это с помощью оператора распространения:

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

Он просто извлекает все поля, кроме name и age, как friends.

Пример:

const oldInfo = {
  name: 'John',
  Age: '32',
  friend1: 'Michael',
  friend2: 'Peter',
};
const { name, Age, ...friends } = oldInfo;
const newInfo = { name, Age, friends };
console.log(newInfo);
0 голосов
/ 02 августа 2020

Если у вас есть динамическое c количество пар ключ-значение friend: name и другие свойства, которые не должны быть вложены в friends, вы можете использовать Object.entries и 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...