对象排序
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://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。