Вот одна строка в простом JavaScript:
const dic1 = {
a : { x : "ax", y : "ay" },
b : { x : "bx", y : "by" }
};
const dicX = Object.entries(dic1).reduce((a, [k, v]) => ({ ...a, [k]: v.x }), {});
const dicY = Object.entries(dic1).reduce((a, [k, v]) => ({ ...a, [k]: v.y }), {});
console.log(dicX);
console.log(dicY);
Если вы сделаете это функцией, она будет иметь длину 1,25 строки:
const dic1 = {
a : { x : "ax", y : "ay" },
b : { x : "bx", y : "by" }
};
const dic = (d, p) =>
Object.entries(d).reduce((a, [k, v]) => ({ ...a, [k]: v[p] }), {});
console.log(dic(dic1, 'x'));
console.log(dic(dic1, 'y'));
Вот еще один способ без reduce
и использования Object.assign
для объединения свойств из каждого внутреннего словаря, но это решение немного длиннее:
const dic = (d, p) =>
Object.assign({}, ...Object.entries(d).map(([k, v]) => ({ [k]: v[p] })));