在日常開發中 可能遇到 一些讓人很頭疼的 遞增數據 ,邏輯很清晰, 但代碼寫起來 就很複雜!~
之前 Vue (iview UI) 寫過一個 購物網站的後臺管理項目,裏面有一個 型號遞增規則 動態生成 表格數據!
寫的我腦子都要炸了(怪我太菜了!)
1. iview table表格 將來要接的數據格式 是 (最終UI 上需要同型號合併表格,忽略) : (這裏我只寫到了 二級內容 業務中需要 三級)
[
{ a: '型號1', c: '紅色'},
{ a: '型號1', d: '藍色'},
{ a: '型號1', e: '綠色'},
{ b: '型號2', c: '紅色'},
{ b: '型號2', d: '藍色'},
{ b: '型號2', e: '綠色'}
]
2. 當初 同事幫助在網上找了一個 複雜的 for 循環方法, 生成到了以下結構數據
( 好像這種結構 在數學公式中有學名 叫一種算法 )當時同事還查了一下讓我看了看 具體叫啥我忘記了
當然 還需要再次 forEach 加工 後才能得到 (1)中的數據結構
function combolist(arr) {
var sarr = [[]]
for (var i = 0; i < arr.length; i++) {
var tarr = []
for (var j = 0; j < sarr.length; j++) {
for (var k = 0; k < arr[i].length; k++) {
tarr.push(sarr[j].concat(arr[i][k]))
}
}
sarr = tarr
}
return sarr
}
[
['型號1', '紅色'],
['型號1', '藍色'],
['型號1', '綠色'],
['型號2', '紅色'],
['型號2', '藍色'],
['型號2', '綠色']
]
最近 無意間看到 excel到處方法裏 用了一行map方法,之後又去網上搜索了一下
下面是 提供的示例:
excel導出中遇到的部分:
jsonData.map(v => filterVal.map(j => v[j]))
網絡提供示例:
var a = [1,2,3]
var b = [3,4]
a.map(a => (b.map(o => [a,o])))
// [ [[1,3],[1,4]], [[2,3],[2,4]], [[3,3],[3,4]] ]
a.flatMap(a => (b.map(o => [a,o])))
// [ [1,3],[1,4],[2,3],[2,4],[3,3],[3,4] ]
3.從而可以解決當初讓我 頭疼的數據結構:(這裏我寫了三級)
而且只需要一行代碼便可以完成業務需要的數據結構(完美)
javascript 不愧是 圖靈完備 型語言 ,js很強大 只是 我太弱了!
let a = ['型號1', '型號2']
let b = ['紅色', '藍色', '綠色']
let c = ['L', 'XL']
let tabList = a.flatMap(aType => b.flatMap(bType => c.flatMap(cType => [{ name: aType, color: bType, size: cType }]) ))
console.log(tabList)