var getColumn = function (list, style, collapse) { const option = { type: "column", style: style, collapse }; if (Array.isArray(list)) { option.list = list; } else { option.data = list; } return option;}var getRow = function (list, style, collapse) { const option = { type: "row", style: style, collapse }; if (Array.isArray(list)) { option.list = list; } else { option.data = list; } return option;}var layout = [ getRow([ getColumn([ getRow([ getColumn({ id:"1" }), getColumn({ id: "2" }), getColumn({ id: "3" }) ],null,2), getRow([ getColumn({ id: "3-4" }) ]), getRow([ getColumn({ id: "4" }) ]), ], null,3), getColumn({ id: "4-5" }), getColumn({ id: "5" }) ]), getRow([ getColumn([ getRow([ getColumn({ id: "6" }), getColumn({ id: "7" }), getColumn({ id: "8" }), getColumn({ id: "9" }) ]), getRow([ getColumn({ id: "10" }), getColumn({ id: "11" }) ]), getRow({ id: "12" }), getRow([ getColumn({ id: "13" }), getColumn({ id: "14" }), getColumn({ id: "15" }) ]), ]), getColumn({ id: "16" }), getColumn() ], {})];var getLayout = () => { var html = "<div class='layout'>" var getRowHtml = (data) => { const collapse = data.collapse || 1; return `<div class='row' style='flex:${collapse}'>` } var getColumnHtml = (data) => { const collapse = data.collapse || 1; return `<div class='column' style='flex:${collapse}'>` } var getCellHtml = (data) => { const text = data.data && data.data.id || "" return `<span>${text}</span></div>`; }; var excutor = function (layout) { layout.forEach(data => { const list = data.list; if (!Array.isArray(data.list)) { html += (data.type === "row" ? getRowHtml(data) : getColumnHtml(data)); html += getCellHtml(data); return; } if (data.type === "row") { html += getRowHtml(data) excutor(list); html += "</div>" } else { html += getColumnHtml(data) excutor(list); html += "</div>" } }); }; excutor(layout); return html;}console.log(getLayout());