如何將一維度數(shù)組轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu)
一維度數(shù)組轉(zhuǎn)換成三維數(shù)組結(jié)構(gòu)
目標(biāo)UI圖


實(shí)現(xiàn)想法
希望如下結(jié)構(gòu)直接循環(huán)
<div v-for="items in dataList" class="data-info">
<g-card-title :data="{title:items.bigTitle}"></g-card-title>
//循環(huán)小標(biāo)題list列表
<g-card v-for="item in items.list" :data="item">
/**組件內(nèi)容示例**/
<div class="title" v-if="item .title">{{item .title}}</div>
<div class="content">
// 循環(huán)小標(biāo)題內(nèi)容itemList列表
<div v-for="(it, key) in item .itemList" :key="key">
{{it.name}}
</div>
</div>
/**組件內(nèi)容示例**/
</g-card>
</div>
const dataList = [{
bigTitle: 'bigTitle',
list: [{
title: 'title',
itemList: [{ name: 'name', value: 'value' },
{ name: 'name', value: 'value' }]
},
{
title: 'title',
itemList: [{ name: 'name', value: 'value' },
{ name: 'name', value: 'value' }]
}]
}]
然后后端返回的數(shù)據(jù)為一維列表, 如下圖

大概數(shù)據(jù)如下
const data=[
{value: "360", name: "前屈(活動(dòng)度)",bigTitle: "一、測(cè)試結(jié)果及結(jié)論", title: "1、頸椎活動(dòng)度測(cè)試結(jié)果"},
{value: "365",name: "前屈(與正常值相比)",bigTitle: "",title: ""},
{value: "365",name: "后伸(活動(dòng)度)",bigTitle: "",title: ""},
{value: "360", name: "",bigTitle: "二、目標(biāo)", title: ""},
]需要將此數(shù)據(jù)結(jié)構(gòu) 轉(zhuǎn)換成 我們所需要的結(jié)構(gòu)
const dataList = [] // 目標(biāo)數(shù)據(jù)列表
let bigTitleNum = 0 // 大標(biāo)題的數(shù)目
let titleNum = 0 // 小標(biāo)題的數(shù)目
// 循環(huán)數(shù)據(jù)
data.forEach(item => {
// 當(dāng)大標(biāo)題存在時(shí)
if (item.bigTitle) {
// 添加一個(gè)對(duì)象
dataList.push({ bigTitle: item.bigTitle, list: [] })
if (bigTitleNum !== 0) { titleNum = 0 }
bigTitleNum++
}
// 當(dāng)小標(biāo)題存在的時(shí)候 或者 只有大標(biāo)題沒(méi)有小標(biāo)題的時(shí)候
if (item.title || (item.bigTitle && !item.title)) {
// 往該大標(biāo)題的對(duì)象中添加小標(biāo)題的對(duì)象
dataList[bigTitleNum - 1].list.push({ title: item.title, itemList: [], requiredFlag: item.requiredFlag })
titleNum++
}
if (titleNum > 0) {
// 添加該小標(biāo)題下的數(shù)據(jù)列表內(nèi)容
dataList[bigTitleNum - 1].list[titleNum - 1].itemList.push({ name: item.name, value: item.value, tagCode: item.tagCode })
}
})
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Javascript實(shí)現(xiàn)重力彈跳拖拽運(yùn)動(dòng)效果示例
本文為大家詳細(xì)介紹下使用Javascript實(shí)現(xiàn)重力彈跳拖拽運(yùn)動(dòng)的具體調(diào)用方法,感興趣的朋友可以參考下哈2013-06-06
更優(yōu)雅的微信小程序骨架屏實(shí)現(xiàn)詳解
這篇文章主要介紹了更優(yōu)雅的微信小程序骨架屏實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
JS實(shí)現(xiàn)網(wǎng)頁(yè)滾動(dòng)條感應(yīng)鼠標(biāo)變色的方法
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)頁(yè)滾動(dòng)條感應(yīng)鼠標(biāo)變色的方法,實(shí)例分析了javascript針對(duì)鼠標(biāo)事件的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
前端實(shí)現(xiàn)Token無(wú)感刷新的思路和具體實(shí)現(xiàn)方法
這篇文章主要介紹了前端實(shí)現(xiàn)Token無(wú)感刷新的思路和具體實(shí)現(xiàn)方法,Token無(wú)感刷新是前端開(kāi)發(fā)中提高用戶體驗(yàn)的一種方法,通過(guò)在Token即將過(guò)期時(shí)自動(dòng)刷新,避免用戶因Token過(guò)期而需要重新登錄,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2025-05-05
JavaScript對(duì)象的淺拷貝與深拷貝實(shí)例分析
這篇文章主要介紹了JavaScript對(duì)象的淺拷貝與深拷貝,結(jié)合實(shí)例形式分析了javascript淺拷貝與深拷貝的原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
解決Layui中templet中a的onclick參數(shù)傳遞的問(wèn)題
今天小編就為大家分享一篇解決Layui中templet中a的onclick參數(shù)傳遞的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09

