zoukankan      html  css  js  c++  java
  • 假数据仓库-常见数据枚举(日期、月份、周几、星期几,前导零、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 不能重复,会导致列对不上)

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

  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/suwanbin/p/15206716.html
Copyright © 2011-2022 走看看