Как правильно разделить два объекта на один, объединяя заданные ключи c? - PullRequest
0 голосов
/ 03 апреля 2020

Учитывая два объекта с разными, но известными ключами - которые могут быть или не быть установлены - каков хороший способ объединить их в один объект, используя указанные c сочетания клавиш для обоих?

Скажем, например, , obj1 может иметь ключи itemA, itemB и itemC. Другой obj2 может иметь ключи item_a, item_b и item_c и имеет приоритет. Клавиши относятся к тем же окончательным клавишам a, b и c соответственно.

Это то, что я придумал, но оно кажется излишне запутанным.

// Given these objects:
const obj1 = { itemA: 1, itemB: 2, itemC: undefined }
const obj2 = { item_a: undefined, item_b: 20, item_c: 30 }

// Desired result: { a: 1, b: 20, c: 30 }

const filter = obj => Object.fromEntries(
    Object.entries(obj).filter(entry => entry[1])
)

const serialized1 = (object => 
    ({ itemA:a, itemB:b, itemC:c } = object) 
    && filter({a, b, c}))(obj1)
const serialized2 = (object => 
    ({ item_a:a, item_b:b, item_c:c } = object) 
    && filter({a, b, c}))(obj2)
const finalObject = { ...serialized1, ...serialized2 }

console.log(finalObject)
// { a: 1, b: 20, c: 30 }

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


Примечание: Упомянутые имена ключей являются примерами. В действительности это может быть произвольно, например, один из im-dimensions и img-res хранится в ключе с именем size.

1 Ответ

1 голос
/ 03 апреля 2020

Используя Stringify и Parse, мы можем достичь этого

const obj1 = { itemA: 1, itemB: 2 };
const obj2 = { item_b: 20, item_c: 30 };
let format=(obj)=>{
 return JSON.parse(JSON.stringify(obj).toLowerCase().replace(/\"(\w*)([a-c]{1}\":)/g,"\"$2"));
}
let obj3={...format(obj1),...format(obj2)}
console.log(obj3);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...