摘要:对象排序带的用法计算个税计算个税需缴税的收入扣除五险一金等起征点税和缴税后的收入计算五险一金计算五险一金收入最高基数根据不同地方来改变此为上海市分别是自己的缴费和公司的缴费,数组各元素分别代表总共养老医疗失业公积金总共养老医疗失业公积
对象排序
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 }; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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 - 知乎专栏...
阅读 2353·2021-11-22 14:56
阅读 1161·2019-08-30 15:55
阅读 3181·2019-08-29 13:29
阅读 1327·2019-08-26 13:56
阅读 3436·2019-08-26 13:37
阅读 540·2019-08-26 13:33
阅读 3330·2019-08-26 13:33
阅读 2207·2019-08-26 13:33