摘要:工具類工具庫,封裝了處理,,,等常見的函數,是對標準庫的補充。業務開發中常用的函數有很多,如等。示例如下整數處理保留兩位小數百分比處理億億處理萬萬處理格式化數字大于億的展示為億,大于萬的展示為萬億萬時間處理庫。
工具類 lodash
工具庫,封裝了處理arrays,numbers,objects,string等常見的函數,是對標準庫的補充。業務開發中常用的函數有很多,如:assign, times, debounce, get, find, filter, keyBy, cloneDeep, groupBy, omit, pick等。示例如下:
const _ = require("lodash"); const obj = { name: "zhangsan", age: 20, friends: [{ name: "lisi", age: 18 }, { name: "wanger", age: 19 }] }; // 深復制,等價于JSON.parse(JSON.stringify(obj)),但是JSON.parse的形式無法復制函數 const obj2 = _.cloneDeep(obj); obj === obj2; // false // 深獲取屬性,業務開發中可以取代if(a && a.b && a.b.c)的形式 _.get(obj, "friends[0].age", 0); // 18 // extend properties _.assign({}, { name: "zhangsan" }, { age: 20 }); // { name: "zhangsan", age: 20 } // remove properties _.omit({ name: "zhangsan", age: 20 }, ["age"]); // { name: "zhangsan"} // pick properties _.pick({ name: "zhangsan", age: 20 }, ["age"]); // { age: 20} const arr = [{ name: "zhangsan", age: 20 }, { name: "lisi", age: 19 }, { name: "wanger", age: 18 } ]; _.keyBy(arr, "name"); // { zhangsan: { name: "zhangsan", age: 20 }, lisi: { name: "lisi", age: 19 }, wanger: { name: "wanger", age: 18 } } // debounce(消抖,停止的時候執行一次)和throttle(節流,每間隔一定時候執行一次) _.debounce(keyword => { console.log(keyword); }, 500); // N loop _.times(6, _.uniqueId.bind(null, "key_")); // [ "key_1", "key_2", "key_3", "key_4", "key_5", "key_6" ] // 安全的JSON.parse function safeParse(str, defaultValue) { let result = _.attempt(function(str) { return JSON.parse(str) }, str) return _.isError(result) ? defalutValue : result } safeParse(JSON.stringify({ a: 1 }), {}); // { a: 1 }is-type-of
js類型判斷庫,可判斷js中的類型,包括promise,generator等。示例如下:
is.array([1]) // => true is.null(null) // => true is.undefined(undefined) // => true is.object({a: 1}) // => truenumeral
格式化處理數字。示例如下:
const TEN_THOUSANDS = 10000 const HUNDRED_MILLION = 100000000 numeral(345333).format("0,0’) => ‘345,333’ // 整數處理 numeral(3.45333).format("0.00’) => ‘3.45" // 保留兩位小數 numeral(0.9756).format("0.00%’) => ’97.56%’ // 百分比處理 numeral(14321235334343).divide(HUNDRED_MILLION).format("0,0.00’) => ‘143,212.35億’ //億處理 numeral(143212353).divide(TEN_THOUSANDS).format("¥0,0.00") => "14,321.24"萬 //萬處理 // 格式化數字, 大于億的展示為億,大于萬的展示為萬... formatNum() { if(number > HUNDREND_MILLION) { return numeral(number).divide(HUNDREND_MILLION).format(‘0,0.00’) + ‘億" } else if(number > TEN_THOUSANDS) { return numeral(number).divide(TEN_THOUSANDS).format(‘0,0.00’) + ‘萬" } else { return numeral(number).format(‘0,0.00") } }moment.js/day.js
時間處理庫。示例如下:
moment().format(‘YYYY-MM-DD")Excel處理 json文件轉excel文件
excel-export庫,基于node.js將數據生成excel文件,生成格式為xlsx。
// json轉excel const nodeExcel = require("excel-export"); const _ = require("lodash"); const fs = require("co-fs"); const co = require("co"); /** * 使用場景: * 導出Excel * * 用法: * params: * - name: excel文件名稱 * - path: 導出的excel路徑 * * rows: * [ * { * name: "" * _created_at: "" * }, * ..... * ] * * cols: * [ * { * key: "name", * text: "名稱" * }, * { * key: "_created_at", * text: "提交時間", * filter: dateStr => { * return dateStr.length === 0 ? dateStr : dateStr.split(".")[0].replace("T", " "); * } * } * ]; */ function wrapConf(rows, cols) { let conf = {}; conf.name = "sheet1"; conf.cols = cols.map(item => { return { caption: item.text, type: item.type || "string", width: item.width || 20 }; }); conf.rows = rows.map((row) => { return cols.map((col) => { if (col.filter) { return col.filter(_.get(row, col.key), row); } else { return _.get(row, col.key); } }); }); return conf; } function* exportExcel(path, rows, cols) { let conf = wrapConf(rows, cols); // 配置項 let result = nodeExcel.execute(conf); // 導出excel return yield fs.writeFile(path, result, "binary"); // 寫入到路徑 } module.exports = exportExcel;excel文件轉json文件
js-xlsx庫,讀取和解析多種格式表格的js庫。
// excel轉json const fs = require("co-fs"); const co = require("co"); const XLSX = require("xlsx"); // { // SheetNames: ["sheet1", "sheet2"], // Sheets: { // // worksheet // "sheet1": { // // cell // "A1": { ... }, // // cell // "A2": { ... }, // ... // }, // // worksheet // "sheet2": { // // cell // "A1": { ... }, // // cell // "A2": { ... }, // ... // } // } // } function toJson(workbook, keys) { let result = {}; let sheetNames = workbook.SheetNames; sheetNames.forEach(sheetName => { let worksheet = workbook.Sheets[sheetName]; result[sheetName] = XLSX.utils.sheet_to_json(worksheet, { header: keys }); }); return result; }; /** * * * @param {any} src: excel文件地址 * @param {any} dest: 導出json文件地址 * @param {any} keys: excel列名映射到json的keys * @returns */ function* excelToJson(src, dest, keys) { let data = yield fs.readFile(src) let json = toJson(XLSX.read(data)) return yield fs.writeFile(dest, JSON.stringify(json, 2, 2)) } module.exports = excelToJson;Markdown
markdown文件轉html文件,使用marked-toc(生成文件目錄),marked(markdown解析庫),hightlight(代碼高亮)。
const md5 = require("md5"); const markedToc = require("marked-toc"); const marked = require("marked"); const highlight = require("highlight"); const fs = require("fs"); function generateTocName(name) { name = name.trim().replace(/s+/g, "").replace(/)/g, "").replace(/[(,]/g, "-").toLowerCase(); if (/^[w-]+$/.test(name)) { return name; } return `toc-${md5(name).slice(0, 3)}`; } // filePath為markdown文件目錄 function markdownToHtml(filePath) { let content = fs.readFileSync(filePath, "utf8"); let tocContent = marked(markedToc(content)).replace(/`; }); return highlightContent; }([^<>]+)/g, (a, b, c) => { return `${c}`; }); let markedContent = marked(content).replace(/ ]*>(.*?)/g, (a, b, c) => { if (b == 2) { return ` ${c} `; } return `${c} `; }); markedContent = markedContent.replace(/]*>([^<>]+)/, (a, b, c) => { return `${a} ${tocContent}`; }); let highlightContent = markedContent.replace(//mg, (a, language, text) => { text = text.replace(/'/g, """).replace(/>/g, ">").replace(/([sS]+?) ${result.value}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104568.html
摘要:本人菜鳥一枚,一直也沒理解這個,不過看到了就記錄一下吧,萬一哪天用到了,說不準就懂了或參數的意思是精確的安裝指定版本的模塊,細心的同學會發現字段里每個模塊版本號前面的不見鳥。。。 NPM命令詳解平時工作中經常用npm安裝,每次用的時候有些命令都要去查一次,這次就自己把這些命令整理下,讓自己可以多記住一些。對于還不知道NPM是什么的同學請自行google吧 這里我就不多BB了,主要記錄...
摘要:此項目前端使用框架,加上這些常用擴展后的其中還加入了加載器解析工具前端動畫等,不需要的可以自行刪除。沒有的,需要設置淘寶鏡像,下載的是國外的鏡像,速度慢而且可能出現下載失敗的問題。 本篇只是實現了 基礎 的功能,對于實際的項目中的權限等還未涉及,這些會在后期逐步完善。相關項目 laravel-vue-iview 的 GitHub 地址 戳這里,此項目基本可用于實際開發工作。 Lara...
摘要:中的配置熱加載插件安裝中的配置優化插件為組件分配,通過這個插件可以分析和優先考慮使用最多的模塊,并為它們分配最小的壓縮代碼分離和文件 0 前言 本文是針對TCM項目所做的WebPack配置文件總結,主要概述了一些常用配置選項和插件使用,對以后的項目有指導意義。TCM的webpack配置文件包括webapck.config.base.js、webapck.config.dev.js、we...
閱讀 1234·2023-04-25 15:53
閱讀 2107·2021-11-19 09:40
閱讀 3493·2021-10-11 10:59
閱讀 2070·2019-08-30 15:55
閱讀 1960·2019-08-30 15:54
閱讀 2306·2019-08-29 13:03
閱讀 2759·2019-08-28 18:17
閱讀 1513·2019-08-27 10:51