Вы можете получить info
из объекта и назначить этот объект вместе с остальным одним объектом.
var array = [{ nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [] } }, { nickname: "Ron", first_name: "Ronald", last_name: "Smith", info: { married: "no", kids_ages: [] } }, { nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [17] }, kids: { first_name: "Harry", last_name: "Smith" } }],
flat = array.map(({ info, ...object }) => ({ ...object, ...info }));
console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Другой подход, сохраняя ключ внешнего объекта в качестве префикса.
function getFlat(object, parent) {
return Object.assign({}, ...Object.entries(object).map(([k, v]) => {
if (v && typeof v === 'object' && !Array.isArray(v)) {
return getFlat(v, k);
}
return { [parent + (parent && '_') + k]: v };
}));
}
var array = [{ nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [] } }, { nickname: "Ron", first_name: "Ronald", last_name: "Smith", info: { married: "no", kids_ages: [] } }, { nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [17] }, kids: { first_name: "Harry", last_name: "Smith" } }],
flat = array.map(o => getFlat(o));
console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }