ИМО, это самый простой способ выполнить то, что вы ищете:
let { prop1, prop2, prop3 } = someObject;
let data = { prop1, prop2, prop3 };
// data === { prop1: someObject.prop1, ... }
По сути, деструктурируйте в переменные, а затем используйте сокращение инициализатора для создания нового объекта. Нет необходимости вObject.assign
В любом случае, я думаю, что это наиболее читаемый способ. Таким образом, вы можете выбрать именно тот реквизит, someObject
который вам нужен. Если у вас есть существующий объект, в который вы просто хотите объединить реквизиты, сделайте что-то вроде этого:
let { prop1, prop2, prop3 } = someObject;
let data = Object.assign(otherObject, { prop1, prop2, prop3 });
// Makes a new copy, or...
Object.assign(otherObject, { prop1, prop2, prop3 });
// Merges into otherObject
Другой, возможно, более чистый способ его написания:
let { prop1, prop2, prop3 } = someObject;
let newObject = { prop1, prop2, prop3 };
// Merges your selected props into otherObject
Object.assign(otherObject, newObject);
Я часто использую это для POST
запросов, когда мне нужно всего несколько фрагментов дискретных данных. Но я согласен, что для этого должен быть один лайнер.
РЕДАКТИРОВАТЬ: PS -
Недавно я узнал, что вы можете использовать ультра-деструктуризацию на первом этапе, чтобы вытащить вложенные значения из сложных объектов! Например...
let { prop1,
prop2: { somethingDeeper },
prop3: {
nested1: {
nested2
}
} = someObject;
let data = { prop1, somethingDeeper, nested2 };
Кроме того, вы можете использовать оператор распространения вместо Object.assign при создании нового объекта:
const { prop1, prop2, prop3 } = someObject;
let finalObject = {...otherObject, prop1, prop2, prop3 };
Или...
const { prop1, prop2, prop3 } = someObject;
const intermediateObject = { prop1, prop2, prop3 };
const finalObject = {...otherObject, ...intermediateObject };
Object.assign(oof, foo)