@vvspl

Как скопировать определенные (не все) свойства объекта?

К примеру, есть объект:

const obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 5,
};

Как получить новый объект с полями b и c и теми же значениями?
  • Вопрос задан
  • 872 просмотра
Решения вопроса 3
Fragster
@Fragster
помогло? отметь решением!
const {b, c} = obj
const obj2 = {b, c}
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Если в новом объекте должны быть все указанные свойства, вне зависимости от их наличия в исходном объекте:

// имена свойств можно передавать в виде массива
const pick = (obj, keys) => Object.fromEntries(keys.map(n => [ n, obj[n] ]));
const newObj = pick(obj, [ 'b', 'c' ]);

// или как отдельные значения
const pick = (obj, ...keys) => keys.reduce((acc, n) => (acc[n] = obj[n], acc), {});
const newObj = pick(obj, 'b', 'c');

Если отсутствующие свойства не нужны:

const pickExisting = (obj, keys) =>
  Object.fromEntries(keys.filter(n => n in obj).map(n => [ n, obj[n] ]));

Если нужны только собственные свойства:

const pickOwn = (obj, keys) =>
  keys.reduce((acc, n) => (Object.hasOwn(obj, n) && (acc[n] = obj[n]), acc), {});

Если хотим выбирать свойства не только по именам, но и по значениям:

const pick = (obj, filterFn) => Object.fromEntries(Object.entries(obj).filter(filterFn));

const obj1 = pick(obj, ([ key, val ]) => 'abc'.includes(key) && val % 2); // {a: 1, c: 3}
const obj2 = pick(obj, n => n[1] > 2); // {c: 3, d: 5}
Ответ написан
Комментировать
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Вот так

const props = ['b', 'c'];

const newObj = Object
  .entries(obj)
  .filter(([key]) => props.includes(key))
  .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
const data = {
  a: 1,
  b: 2,
  c: 3,
  d: 5
};

const updatedData = Object.entries(data).reduce((acc, item) => {
  const [key, value] = item;
  if (key === "b" || key === "c") {
    acc[key] = value;
  }
  return acc;
}, {});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы