function config(b = {}) { if (!b.extends || !b.extends.length) return b; if (!Array.isArray(b.extends)) throw new Error(".extends must be array"); let a = []; for (let i = 0; i < b.extends.length; i++) { b.extends[i] = config(b.extends[i]); } const f = Object.assign({}, ...b.extends.map(e => e), { ...b }); delete f.extends; return f; } console.log( config({ extends: [{ extends: [{ bar: "zoo", extends: [{ cow: "cow" }] }] }], bar: "bar" }) );