假数据仓库-常见数据枚举(日期、月份、周几、星期几,前导零、Excel 列号)

假数据仓库-常见数据枚举(日期、月份、周几、星期几,前导零、Excel 列号)

日期相关规律数据

(用 excel 自动填充来生成也很方便)

["1","2","3","4","5","6","7","8","9","10","11","12"]

["01","02","03","04","05","06","07","08","09","10","11","12"]

["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]

["01月","02月","03月","04月","05月","06月","07月","08月","09月","10月","11月","12月"]


["周一","周二","周三","周四","周五","周六","周日"]

["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]


["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]

["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]

["1日","2日","3日","4日","5日","6日","7日","8日","9日","10日","11日","12日","13日","14日","15日","16日","17日","18日","19日","20日","21日","22日","23日","24日","25日","26日","27日","28日","29日","30日","31日"]

快速凑出单元格列号(可快速扩展出常见的 excel 列号)

拼接原理

  • 拿着排好序的26字母,利用 JS 字符串操作来拆解、拼接
/* 26 字母转单字母数组 */
const A_TO_Z_ARRAY = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

/* AA-AZ */
const AA_TO_AZ_ARRAY = A_TO_Z_ARRAY.map(item => "A"+item)
// ["AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ"]

/* BA-BZ 方法同上(AA-AZ),把字母 A 换成 B 即可,...ZA-ZZ 同理 */
const BA_TO_BZ_ARRAY = A_TO_Z_ARRAY.map(item => "B"+item)
// ["BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ"]

// 连接数组(concat 不会改变原有数组,而是会返回一个新的数组)
let AToBZArray = A_TO_Z_ARRAY.concat(AA_TO_AZ_ARRAY, BA_TO_BZ_ARRAY)
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ"]

取得列号

/* 26 字母转单字母数组 */
const A_TO_Z_ARRAY = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")

/* AA-AZ */
const AA_TO_AZ_ARRAY = A_TO_Z_ARRAY.map(item => "A"+item)
// ["AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY", "AZ"]


/* 我的 excel 是从 A列 到 AJ列 */
// 从上面复制要的这一段
let otherColArr = ["AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ"]
// 把两端拼接起来,拿到列号集合
let myCol = A_TO_Z_ARRAY.concat(otherColArr)
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ"]

JS 字典是无序的,所以顺序可能并不如你想的那样...

所以采用 JavaScript 中的 map 来存,可以达到有序

let obj = {}
myCol.forEach(item => obj[item] = "")
// {"A":"","AA":"","AB":"","AC":"","AD":"","AE":"","AF":"","AG":"","AH":"","AI":"","AJ":"","B":"","C":"","D":"","E":"","F":"","G":"","H":"","I":"","J":"","K":"","L":"","M":"","N":"","O":"","P":"","Q":"","R":"","S":"","T":"","U":"","V":"","W":"","X":"","Y":"","Z":""}


let myMap = new Map()
myCol.forEach(item => myMap.set(item, ""))
// {}
/*
[[Entries]]
0: {"A" => ""}
1: {"B" => ""}
2: {"C" => ""}
3: {"D" => ""}
4: {"E" => ""}
5: {"F" => ""}
6: {"G" => ""}
7: {"H" => ""}
8: {"I" => ""}
9: {"J" => ""}
10: {"K" => ""}
11: {"L" => ""}
12: {"M" => ""}
13: {"N" => ""}
14: {"O" => ""}
15: {"P" => ""}
16: {"Q" => ""}
17: {"R" => ""}
18: {"S" => ""}
19: {"T" => ""}
20: {"U" => ""}
21: {"V" => ""}
22: {"W" => ""}
23: {"X" => ""}
24: {"Y" => ""}
25: {"Z" => ""}
26: {"AA" => ""}
27: {"AB" => ""}
28: {"AC" => ""}
29: {"AD" => ""}
30: {"AE" => ""}
31: {"AF" => ""}
32: {"AG" => ""}
33: {"AH" => ""}
34: {"AI" => ""}
35: {"AJ" => ""}
*/

[...myMap.keys()]
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ"]

[...myMap.values()]
// ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]

似乎有些麻烦了,填数据也没有很轻量直观的感觉,还是用对象+对照数组实现吧

  • 数组有序,对象无序
let myCol = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ"]

// 合并单元格,这一行就 A、AE 有值,其他的就不用写了,简短可维护的代码,达到了同样的效果
let obj = {
    "A": "A单元格",
    "AE": "AE单元格"
}
let header = myCol.map(item => obj[item] || "")
// ["A单元格", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE单元格", "", "", "", "", ""]

对比改版前后的代码,写个优化总结

需要注意重复的值(作为 key 不能重复,会导致列对不上)

在谷歌浏览器控制台里敲会有个数提示,可以进一步确保数据的正确性

原文地址:https://www.cnblogs.com/suwanbin/p/15206716.html