摘要:數(shù)據(jù)格式轉(zhuǎn)換方法學(xué)習(xí)將數(shù)據(jù)轉(zhuǎn)為行列模式方便使用統(tǒng)一數(shù)據(jù)格式來循環(huán)遍歷來輸出所有屬性并且能根據(jù)需要轉(zhuǎn)換不同的值例子實(shí)現(xiàn)是用來演示的一般的實(shí)現(xiàn)方式原始數(shù)據(jù)是外面是包了一層是數(shù)組格式然后里面每一個(gè)數(shù)組元素都是一個(gè)對象代表每一個(gè)每個(gè)里面分別是屬性和
API數(shù)據(jù)格式轉(zhuǎn)換方法學(xué)習(xí)
將數(shù)據(jù)轉(zhuǎn)為行列模式,方便使用統(tǒng)一數(shù)據(jù)格式來循環(huán)遍歷來輸出所有屬性,并且能根據(jù)需要轉(zhuǎn)換不同的值.
一般的實(shí)現(xiàn)方式例子實(shí)現(xiàn)是用vue來演示的
原始數(shù)據(jù)是外面是items包了一層,是數(shù)組格式,然后里面每一個(gè)數(shù)組元素都是一個(gè)對象,代表每一個(gè)item,每個(gè)item里面分別是屬性和值
原始數(shù)據(jù):
"items": [ { "goods_name": "哈哈哈", "goods_spec_name": "11111", "goods_price": 100, "goods_num": 1, "status": 2, }, { "goods_name": "哈哈哈11111", "goods_spec_name": "11111", "goods_price": 100, "goods_num": 1, "status": 2, } ]
一般的寫法會根據(jù)各個(gè)值進(jìn)行遍歷,這樣的話,
代碼會很長,也不整潔
不靈活,如果要處理一些值的格式化變化,就需要修改循環(huán)里面的代碼,或者數(shù)據(jù)格式萬一改變了,那么也要修改循環(huán)里面的代碼,很容易出錯(cuò)
商品名:@{{item.goods_name}}規(guī)格:@{{item.goods_spec_name}}單價(jià):@{{(item.goods_price/100).toFixed(2)}}數(shù)量:@{{item.goods_num}}訂單狀態(tài): 待支付 待發(fā)貨 待發(fā)貨 交易完成
用更好的方式實(shí)現(xiàn)去解決以上的問題
將原先的數(shù)據(jù)輸出改成行列模式,每一行包含多個(gè)列,每一行代表一個(gè)原始數(shù)據(jù)對象,每一列代表一個(gè)原始數(shù)據(jù)對象的一個(gè)屬性,節(jié)省了輸出代碼,也整潔了邏輯,每一行都代表一種類型的屬性,例如第一行都是商品名稱相關(guān)的,第二行都是商品狀態(tài)相關(guān)的
轉(zhuǎn)換是需要一個(gè)轉(zhuǎn)換函數(shù)進(jìn)行的,將原始數(shù)據(jù)和輸出數(shù)據(jù)之間搭建一個(gè)橋梁,這樣有什么修改都可以修改橋梁,避免去處理輸出數(shù)據(jù),也不用去改變原始數(shù)據(jù)(很多時(shí)候上層api數(shù)據(jù)格式是不能改變的)
轉(zhuǎn)換過程可以對值進(jìn)行一些多帶帶的轉(zhuǎn)換處理,很靈活
@{{ col[0] }} @{{ col[1] }}
這是轉(zhuǎn)換函數(shù),轉(zhuǎn)換過后的值才能被行列寫法的循環(huán)遍歷使用
function change_list_data(all) { var ret = []; var data, x, y, z, row, col, def; var key, val, opt; var fmt = [ //建立一個(gè)過渡格式 [ // 行 // 格式說明;[key, 標(biāo)題名字, 值轉(zhuǎn)換函數(shù), 選項(xiàng)轉(zhuǎn)換函數(shù)] ["goods_name", "商品名", null, null], // 列 ["goods_spec_name", "規(guī)格", null, null], ["goods_price", "單價(jià)", fee2yuan, null], //這里有一個(gè)價(jià)格的轉(zhuǎn)換函數(shù),將分轉(zhuǎn)為元的單位 ["goods_num", "數(shù)量", null, null] ], [ ["status", "狀態(tài)", null, null] ] ]; for (x = 0; x < all.length; ++x) { //遍歷原始數(shù)據(jù),并且每次循環(huán)的時(shí)候創(chuàng)建一個(gè)data變量,保存的是原始數(shù)據(jù)的當(dāng)前循環(huán)的值,即保存了一個(gè)商品對象的信息,用來獲取原始數(shù)據(jù)的數(shù)據(jù)的 data = all[x]; row = []; // 創(chuàng)建一個(gè)行變量 for (y = 0; y < fmt.length; ++y) { //遍歷過渡格式的行 col = []; //創(chuàng)建一個(gè)列變量 for (z = 0; z < fmt[y].length; ++z) { //遍歷過渡格式的列 def = fmt[y][z]; //獲得過渡格式的列的值,如fmt[0][0]就是["goods_name", "商品名", null, null] key = def[0]; // 先保存key if (typeof def[2] == "function") { // 看看值是否需要做轉(zhuǎn)換處理 val = def[2](data[key]); //執(zhí)行特殊轉(zhuǎn)換函數(shù),并且傳入原始數(shù)據(jù)的這個(gè)key的值然后,例如轉(zhuǎn)換價(jià)格 } else { val = data[key]; } if (typeof def[3] == "function") { // 看看選項(xiàng)是否需要做轉(zhuǎn)換處理 opt = def[3](val, data[key]);//類似做法 } else if (def[3] === null) { opt = {}; //因?yàn)檫x項(xiàng)不能null } else { opt = def[3]; } //將修改后的數(shù)據(jù)push到列里 col.push([def[1], val, opt]); } //將修改后的列數(shù)據(jù)push到行里 row.push(col); } //將修改后的行數(shù)據(jù)push到行里 ret.push(row); } return ret; }
總的來說:
關(guān)鍵的關(guān)鍵是通過一個(gè)key來實(shí)現(xiàn)數(shù)據(jù)溝通,["goods_name", "商品名", null, null],這里的goods_name就是一個(gè)key,因?yàn)閷?yīng)到原始數(shù)據(jù)的goods_name,這樣轉(zhuǎn)換前后的數(shù)據(jù)之間就能夠互相處理
這是轉(zhuǎn)換后的數(shù)據(jù)是:
[ [ //這里是一個(gè)商品對象 [ //這里是一個(gè)商品的一行屬性,每行能夠顯示一種模式的列屬性, [ //這里是一個(gè)商品的列屬性,每一行有多列,這樣可以很方便的使用0,1這樣來調(diào)用數(shù)組的數(shù)據(jù),簡化了操作 0=>"商品名", 1=>"哈哈哈" ], [ 0=>"規(guī)格", 1=>"1" ] ], [ //這里是一個(gè)商品的一行屬性 [ 0=>"狀態(tài)", 1=>"1" ], ] ], [ //這里是第二個(gè)商品對象 [ [ 0=>"商品名", 1=>"哈哈哈111" ], [ 0=>"規(guī)格", 1=>"1111" ] ], [ [ 0=>"狀態(tài)", 1=>"2" ], ] ] ]關(guān)于靈活地對值進(jìn)行處理
在過渡格式里面,每一列都有4個(gè)參數(shù)
// 格式說明;[key, 標(biāo)題名字, 值轉(zhuǎn)換函數(shù), 選項(xiàng)轉(zhuǎn)換函數(shù)] ["goods_name", "商品名", null, null], // 列
在循環(huán)的時(shí)候通過判斷是否是轉(zhuǎn)換函數(shù)來進(jìn)行轉(zhuǎn)換
if (typeof def[2] == "function") { val = def[2](data[key]); //這里拆開來看就是一個(gè)函數(shù)傳入?yún)?shù)的處理,因?yàn)閐ef[2]是一個(gè)含糊是,然后()進(jìn)行傳參 } else { val = data[key]; }
例如狀態(tài)值,在api數(shù)據(jù)里面是數(shù)字,但是在輸出顯示的時(shí)候就要用文字
所以傳入一個(gè)狀態(tài)轉(zhuǎn)換的函數(shù),然后方便轉(zhuǎn)換數(shù)字為文字
["status", "狀態(tài)", statusT, null] //那么就使用這個(gè)轉(zhuǎn)換函數(shù) //val = def[2](data[key]); val = statusT(data[key]); //實(shí)際上會變成這樣 //例如statusT是這樣的,傳入數(shù)字,返回文字 function statusT(code) { var str; switch (code) { case 0: str = "未支付"; break; case 1: str = "待發(fā)貨"; break; case 2: str = "已發(fā)貨"; break; } return str; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81503.html
摘要:類是日期時(shí)間格式化子類的抽象類,我們通過這個(gè)類可以幫我們完成日期和文本之間的轉(zhuǎn)換也就是可以在對象與對象之間進(jìn)行來回轉(zhuǎn)換。構(gòu)造方法由于為抽象類,不能直接使用,所以需要常用的子類。 day01【Object類、常用API】 主要內(nèi)容 Object類 Date類 DateFormat類 Calendar類 System類 StringBuilder類 包裝類 教學(xué)目標(biāo) -[ ] 能夠說出...
摘要:其標(biāo)準(zhǔn)為前身是,提供強(qiáng)大的在線編輯功能,包括語法高亮錯(cuò)誤提示自動完成實(shí)時(shí)預(yù)覽,并且支持用戶以格式撰寫導(dǎo)入導(dǎo)出轉(zhuǎn)換文檔。 團(tuán)隊(duì)內(nèi)部RestAPI開發(fā)采用設(shè)計(jì)驅(qū)動開發(fā)的模式,即使用API設(shè)計(jì)文檔解耦前端和后端的開發(fā)過程,雙方只在聯(lián)調(diào)與測試時(shí)耦合。在實(shí)際開發(fā)和與前端合作的過程中,受限于眾多因素的影響,開發(fā)效率還有進(jìn)一步提高的空間。本文的目的是優(yōu)化工具鏈支持,減少一部分重復(fù)和枯燥的勞動。 現(xiàn)狀...
摘要:簡介是前端操作以及類似的二維表的最佳選擇之一而是它的社區(qū)版本將注意力集中到了數(shù)據(jù)轉(zhuǎn)換和導(dǎo)出上所以它支持相當(dāng)多種類的數(shù)據(jù)解析和導(dǎo)出不僅僅局限于支持格式支持的導(dǎo)入格式支持的導(dǎo)出格式它可以解析符合格式的數(shù)據(jù)導(dǎo)出符合格式的數(shù)據(jù)利用中間層操作數(shù)據(jù) 簡介 SheetJS是前端操作Excel以及類似的二維表的最佳選擇之一,而js-xlsx是它的社區(qū)版本. js-xlsx將注意力集中到了數(shù)據(jù)轉(zhuǎn)換和導(dǎo)出...
摘要:用來轉(zhuǎn)換內(nèi)容,內(nèi)部調(diào)用了方法進(jìn)行轉(zhuǎn)換,這里簡單介紹一下的原理將代碼解析成,對進(jìn)行轉(zhuǎn)譯,得到新的,新的通過轉(zhuǎn)換成,核心方法在中的方法,有興趣可以去了解一下。將函數(shù)傳入?yún)?shù)和歸并,得到。通常我們是用不上的,估計(jì)在某些中可能會使用到。 什么是Loader? 繼上兩篇文章webpack工作原理介紹(上篇、下篇),我們了解到Loader:模塊轉(zhuǎn)換器,也就是將模塊的內(nèi)容按照需求裝換成新內(nèi)容,而且每...
閱讀 3139·2021-11-18 10:02
閱讀 2648·2021-10-13 09:47
閱讀 3119·2021-09-22 15:07
閱讀 831·2019-08-30 15:43
閱讀 1847·2019-08-30 10:59
閱讀 1731·2019-08-29 15:34
閱讀 1733·2019-08-29 15:06
閱讀 482·2019-08-29 13:28