My Javascript Snippets

对象排序

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 };
}
    原文作者:Aiello_Chan
    原文地址: https://segmentfault.com/a/1190000018443192
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞