摘要:對象排序帶的用法計算個稅計算個稅需繳稅的收入扣除五險一金等起征點稅和繳稅后的收入計算五險一金計算五險一金收入最高基數根據不同地方來改變此為上海市分別是自己的繳費和公司的繳費,數組各元素分別代表總共養老醫療失業公積金總共養老醫療失業公積
對象排序
function sortObject(obj, recursive, sortFunc) { const result = {} Object.keys(obj).sort(sortFunc).forEach(key=>{ const curValue = obj[key] if(recursive && Object.prototype.toString.call(curValue) === "[object Object]"){ result[key] = sortObject(curValue,recursive,sortFunc) }else{ result[key] = curValue } }) return result; }帶 Progress 的 Promise.all
function promiseAll(promises) { let finishedCount = 0 let progressCb = () => {} const promisesLength = promises.length const results = new Array(promisesLength) const result = new Promise(function(resolve, reject) { promises.forEach((val, idx) => { Promise.resolve(val).then( function(res) { finishedCount++ results[idx] = res progressCb(finishedCount, results) if (finishedCount === promisesLength) { return resolve(results) } }, function(err) { return reject(err) }, ) }) }) result.progress = cb => { progressCb = cb return result } return result } // 用法 Promise.prototype.all = promiseAll var p1 = Promise.resolve(1) var p2 = Promise.resolve(2) var p3 = Promise.resolve(3) Promise.all([p1, p2, p3]) .progress((i, j) => { console.log(i, j) }) .then(function(results) { console.log(results) // [1, 2, 3] })計算個稅
/** * 計算個稅 * @param taxableIncome {number} 0 需繳稅的收入(扣除五險一金等) * @param startLine {number} 5000 起征點 * @return {afterTax, tax} 稅和繳稅后的收入 */ function calTax(taxableIncome = 0, startLine = 5000) { // configs const levels = [0, 3000, 12000, 25000, 35000, 55000, 80000]; const taxRates = [0, 0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45]; const deductions = [0, 0, 105, 555, 1005, 2755, 5505, 13505]; const toBeTaxedIncome = taxableIncome - startLine; const levelIdx = levels.findIndex(level => level > toBeTaxedIncome); const tax = toBeTaxedIncome * taxRates[levelIdx] - deductions[levelIdx]; const afterTax = taxableIncome - tax; return { afterTax, tax }; }計算五險一金
/** * 計算五險一金 * @param income {number} 0 收入 * @param maxBase {number} 21400 最高基數,根據不同地方來改變,此為上海市 * @return {myFees, cFees} {Array,Array} 分別是自己的繳費和公司的繳費,數組各元素分別代表: * myFees: [總共 養老 醫療 失業 公積金] * cFees: [總共 養老 醫療 失業 公積金 工傷 生育] */ function calInsurances(income, maxBase = 19512) { // configs // 我的費率:養老 醫療 失業 公積金 const myRates = [0.08, 0.02, 0.005, 0.07]; // 公司費率:養老 醫療 失業 公積金 工傷 生育 const cRates = [0.2, 0.1, 0.005, 0.07, 0.003, 0.01]; // 添加總費率 myRates.unshift( myRates.reduce((totalRate, curRate) => totalRate + curRate, 0) ); cRates.unshift(cRates.reduce((totalRate, curRate) => totalRate + curRate, 0)); const base = Math.min(income, maxBase); const myFees = myRates.map(rate => (base * rate).toFixed(2)); const cFees = cRates.map(rate => (base * rate).toFixed(2)); return { myFees, cFees }; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109030.html
摘要:屬性我們還可以使用來書寫樣式,它會自動幫我們編譯為格式內容語法高亮建議使用配合該擴展支持語法高亮擴展開發項目,當然你可以把文件當作對待。 Omil 是什么? Omil是一個 webpack 的 loader,它允許你以一種名為單文件組件(SFCs)的格式撰寫 Omi 組件: ${this.data.title} export default class { test(){...
摘要:插件提供內容,負責渲染。增量更新,盡可能地減少重新渲染長時間運行的任務應該支持,并可以取消插件能夠正確地處理對象的生命周期。使用了模式,運行可以將這個對象銷毀。 使用 命令行使用 幫助:code --help 使用已經打開的窗口來打開文件:code -r 打開文件并滾動到特定行:code -r -g package.json:128 比較兩個文件:code -r -d a.tx...
摘要:前端日報精選瀏覽器兼容性問題解決方案配置指南全新的模塊化框架,知乎專欄現學現賣中文教學向再加行代碼教你實現一個低配版的庫原理篇我把最美的青春都獻給了代碼技術周刊開啟瀏覽器全屏模式如何進行的操作掘金內存分配與垃圾回收寫一 2017-08-29 前端日報 精選 瀏覽器兼容性問題解決方案AlloyTeam ESLint 配置指南全新的redux模塊化框架,redux-arena - 知乎專欄...
閱讀 2373·2021-11-22 14:56
閱讀 1179·2019-08-30 15:55
閱讀 3211·2019-08-29 13:29
閱讀 1358·2019-08-26 13:56
閱讀 3498·2019-08-26 13:37
閱讀 566·2019-08-26 13:33
閱讀 3354·2019-08-26 13:33
閱讀 2235·2019-08-26 13:33