寫出表格的結構html,一個面試題,根據json結構生成html表格

我的輸入是

{

A1: {

B1: {

C1: {

D1: 1233,

D2: 11

},

C2: {

D1: 10,

D2: 10

}

},

B2: {

C1: {

D1: 10,

D2: 11

},

C2: {

D1: 10,

D2: 10

},

C3: {

D1: 10,

D2: 10

}

}

}

}

用什么框架都可以,只要求輸出以下table, json的最后一個節點就是table的最后一個column,并且只能占據一行,也就是rowspan要為1.然后難點在于怎么判斷前面的column占用的rowspan,我一點思路的都沒有囧…

669330bb97fb882d5a65801eb0fa70cb.png

更新:

如果有代碼演示最好了,底下評論的朋友謝謝了,我看了文章還是想不出來改怎么寫代碼…

回答:

樹的遞歸,根據后代葉子節點數量決定當前節點所跨的行,深度優先適合此場景。

代碼實現:http://jsrun.net/AXaKp/edit

function getRows (data) {

const result = []

const values = Object.values(data)

if (values.some(v => typeof v !== 'object' || !v || !Object.keys(v).length)) {

result.push([{

text: Object.keys(data).join(', '),

rowspan: 1

}])

return result

}

for (let k in data) {

const pathList = getRows(data[k])

if (pathList.length) {

const first = pathList[0]

first.unshift({

text: k,

rowspan: pathList.length

})

}

result.push(...pathList)

}

return result

}

function generateHtml (rows, head) {

return `

${ head.map(h => `

${h}`).join('') }

${rows.map(r => {

return `

${r.map(({ text, rowspan }) => `

${text}`).join('')}

`

}).join('\n')}

`

}

function render (data) {

const rows = getRows(data)

const head = (rows[0] || []).map(r => `Column-${r.text[0]}`)

const html = generateHtml(rows, head)

const div = document.createElement('div')

div.innerHTML = html

document.body.appendChild(div)

}

測試:

render(data)

效果:

4ce0a77c4c3dc0c4732627f03a839e9f.png

回答:

這是一個樹形結構,遍歷這棵樹,通過遞歸把每個節占據的行數算出來(就是每個子節點占據的行數之后)。然后你在渲染表格的時候就知道 rowspan 該是多少了(注意:如果為 1 可以省略哦)

給個提示

function calcRows(node) {

const keys = Object.keys(node);

const rowspan = node.rowspan = keys.reduce((sum, key) => sum + calcRows(node[key]), 0);

return rowspan;

}

回答:

把JSON對象視為樹,表格的單元格就是節點,每一行就是節點的路徑。這樣每個單元格的rowSpan就是其路徑的數量。

const data = {

A1: {

B1: {

C1: {

D1: 1233,

D2: 11

},

C2: {

D1: 10,

D2: 10

}

},

B2: {

C1: {

D1: 10,

D2: 11

},

C2: {

D1: 10,

D2: 10

},

C3: {

D1: 10,

D2: 10

}

}

}

}

// 利用遞歸方式的深度優先遍歷算法計算每個節點的路徑數量,并保持路徑列表

function getPath(node, key) {

const pathList = Object.keys(node).reduce((pathList, key) => {

return pathList.concat(getPath(node[key], key));

}, [])

const pathCount = pathList.length;

pathList.map((path, index) => {

// 這里特殊處理下:只在第一條路徑里插入當前節點key,其他路徑不插入,方便生成`tr`

path.unshift(!!index ? null : { key, pathCount })

return path;

});

return pathList.length ? pathList : [[{ key, pathCount: 1 }]]

}

// 路徑列表轉成`tr`列表

function toTableRows(data) {

const pathList = getPath(data, 'root');

const rows = pathList.map((row, index) => {

const tr = ['

'];

for(let i = 1; i < row.length; ++i) {

if(row[i]) {

const { key, pathCount } = row[i];

tr.push(`

${key}`)

}

}

return tr.join('')

})

return rows.join('')

}

document.getElementById('table').innerHTML = toTableRows(data)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445707.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445707.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445707.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

how to learn html5,HTML5與CSS基礎

你將學到什么How to write a Web pageConcepts of a markup languageBasics of HTML5 and CSSWeb design and stylePage layout and flexbox課程概況This course is part of W3C’s “Front-End Web Developer” Professional Certificate.Learn the basics of Web design and …

單元測試中使用Mockito模擬對象

單元測試應該小巧玲瓏&#xff0c;輕盈快捷。然而&#xff0c;一個待測的對象可能依賴另一個對象。它可能需要跟數據庫、郵箱服務器、Web Service、消息隊列等服務進行交互。但是&#xff0c;這些服務可能在測試過程中不可用。假設這些服務可用&#xff0c;依賴這些服務的單元測…

足球點球 html5,身為西甲第一點球手,C羅只有5次讓點經歷,難怪點球破門過百...

當今足壇是C羅和梅西的天下&#xff0c;兩人持續不斷的刷新創造各種記錄&#xff0c;讓球迷應接不暇。比梅西大2歲的C羅近期更是開掛&#xff0c;今天說他的點球。C羅現在是西甲歷史上的第一點球手本賽季西甲第21輪&#xff0c;皇馬客場4-1大勝瓦倫西亞&#xff0c;C羅在比賽中…

Spring Cloud 學習筆記(2 / 3)

Spring Cloud 學習筆記&#xff08;1 / 3&#xff09; Spring Cloud 學習筆記&#xff08;3 / 3&#xff09; ---56_Hystrix之全局服務降級DefaultProperties57_Hystrix之通配服務降級FeignFallback58_Hystrix之服務熔斷理論59_Hystrix之服務熔斷案例(上)60_Hystrix之服務熔斷…

html5的colgroup,HTML colgroup 標簽 | 菜鳥教程

HTML 標簽實例 和 標簽為表格中的三個列設置了背景色&#xff1a;ISBNTitlePrice3476896My first HTML$53嘗試一下 瀏覽器支持所有主流瀏覽器都支持 標簽。標簽定義及使用說明 標簽用于對表格中的列進行組合&#xff0c;以便對其進行格式化。通過使用 標簽&#xff0c;可以向…

Spring Cloud 學習筆記(3 / 3)

Spring Cloud 學習筆記&#xff08;1 / 3&#xff09; Spring Cloud 學習筆記&#xff08;2 / 3&#xff09; ---108_Nacos之Linux版本安裝109_Nacos集群配置(上)110_Nacos集群配置(下)111_Sentinel是什么112_Sentinel下載安裝運行113_Sentinel初始化監控114_Sentinel流控規則…

普林斯頓計算機科學系,普林斯頓大學計算機科學系

普林斯頓大學計算機科學系研究生階段開設有以下學位項目&#xff0c;分別是計算機科學博士&#xff1a;為期5年&#xff0c;要求申請者本科畢業&#xff0c;不限專業背景&#xff0c;但通常被錄取的學生擁有工程、理科或數學專業背景&#xff0c;未設定本科GPA要求&#xff0c;…

html5語句大全,html5基礎語句(學習)

起風了兼容性問題文檔類型設定字符設定常用新標簽新增的input type屬性值&#xff1a;常用新屬性綜合案例兼容性問題文檔類型設定documentHTMLhttp://blog.sina.com.cn/s/blog_6b38618701011csx.html(html5-api)http://blog.csdn.net/temotemo/article以多維模型為核心&#xf…

html單選按鈕for,HTML如何實現RadioButton單選按鈕

用HTML來實現RadioButton&#xff0c;需要使用input標簽&#xff0c;其中type指定為radio&#xff0c;接下來的文章我們就來說一說詳細的內容。我們先來看input標簽的格式注&#xff1a;對于需要選中檢索的值&#xff0c;可以利用表單的提交或使用JavaScript獲取。我們來看具體…

計算機基礎知識整理 手抄報,科技小制作的手抄報資料簡單字少

科學是一切生活的基礎&#xff0c;如同一把鑰匙&#xff0c;為我們開辟前進的道路。科技在我們的生活中也是很重要的。你會做科技手抄報嗎?下面是學習啦小編為大家帶來的有關科技小制作的手抄報&#xff0c;希望大家喜歡。有關科技小制作的手抄報的圖片參考有關科技小制作的手…

《深入理解JVM.2nd》筆記(五):調優案例分析與實戰

文章目錄概念案例分析高性能硬件上的程序部署策略情景再現1問題分析1關于Full GC使用64位JDK來管理大內存可能遇到問題建立邏輯集群使用邏輯集群可能遇到的問題最后解決方案集群間同步導致的內存溢出情景再現2問題分析2堆外內存導致的溢出錯誤情景再現3問題分析3外部命令導致系…

計算機課是一體化教學嗎,計算機基礎課程理實一體化教學模式

計算機基礎課程理實一體化教學模式摘要:“大學計算機基礎”是高職人材培養各專業計算機技術應用的基礎。本文圍繞這一問題,就如何培養學生更好地利用計算機去解決專業領域及日常事務中的問題,如何提高學生利用信息技術解決專業領域問題的能力和意識進行探討。對教學中推進理實一…

Java開發常見面試題詳解(并發,JVM)

預覽 并發 問題詳解請談談你對volatile的理解linkCAS你知道嗎&#xff1f;link原子類Atomiclnteger的ABA問題談談?原子更新引用知道嗎&#xff1f;link我們知道ArrayList是線程不安全&#xff0c;請編碼寫一個不安全的案例并給出解決方案link公平鎖/非公平鎖/可重入鎖/遞歸鎖…

計算機組網配置,計算機組網技術與配置教案..doc

計算機組網技術與配置教案.第一節課課程名稱第1章 計算機組網技術基礎學時2課程內容1.1、計算機網絡介紹&#xff0c;局域網概念&#xff0c;雙絞線和網絡傳輸介質&#xff0c;組網軟硬件具體介紹教學目的掌握計算機網絡的一般概念掌握局域網的定義了解網絡軟硬件組成了解傳輸介…

怎樣恢復計算機管理員身份,電腦高手必備:2招教你找回Windows管理員權限?

原標題&#xff1a;電腦高手必備&#xff1a;2招教你找回Windows管理員權限&#xff1f;昨晚有個小伙伴提問有關Windows賬戶信息的問題&#xff0c;雖然描述上有些籠統吧&#xff0c;但根據小編多年的經驗猜測(此處是得意臉)&#xff0c;不是某些安全軟件把當前賬戶的管理員模式…

K12計算機科學標準,計算機科學新主張(K12基礎教育) 翻譯.pptx

《計算機科學新主張(K12基礎教育) 翻譯.pptx》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《計算機科學新主張(K12基礎教育) 翻譯.pptx(26頁珍藏版)》請在人人文庫網上搜索。1、計算機與軟件科學正在改變一切,but the majority of schools dont teach computer scie…

樓主考南師計算機學碩,【圖片】2019南師大新傳學碩考研經驗貼【南京師范大學研究生吧】_百度貼吧...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓第二階段&#xff1a;7月—8月我個人認為這一階段是在整個專業課復習過程中相對來說最重要的。因為暑假不用上課不用寫作業&#xff0c;基本沒有任何干擾&#xff0c;可以全心全意的投入復習當中。復習的地點大家隨意&#xff0c;我…

計算機中丟失mpr.dll,mprmsg.dll

mprmsg.dll是一款電腦系統缺失修復文件&#xff0c;該文件是很多程序運行的基礎&#xff0c;丟失后會報錯&#xff0c;同時某些時候會發生文件誤刪導致丟失&#xff0c;這時只要下載該文件進行修復即可。軟件介紹mprmsg.dll官方版是一款小巧實用的電腦操作系統專用應用程序擴展…

計算機分類及在信息社會中的應用,計算機在信息社會中的應用.doc

計算機在信息社會中的應用PAGE 11武漢市事業單位工人技能鑒定 技師論文課題名稱 計算機在信息社會中的應用 學生姓名 工 種 工作單位 指導老師 完 成 時 間&#xff1a; 2013年 月 日目 錄TOC \o "1-3" \h \u HYPERLINK \l _Toc18761 一、 前言 PAGEREF _Toc18761 2 …

ajax獲取qq音樂源碼,ajax請求QQ音樂

搜索歌曲function go() {var val document.getElementById("name").value;let url ‘https://c.y.qq.com/soso/fcgi-bin/search_for_qq_cp?g_tk5381&uin0&formatjsonp&inCharsetutf-8&outCharsetutf-8&notice0&platformh5&needNewCod…