• JS根据占比计算名次范围


    以下面为例:

     根据(总数和占比)可以很简单的计算出来对应等级的总数;

    思路:

    名次的计算相当于计算开始名次和结束名次

    等级人数(totalNum)=总人数(companyNumber)*占比(proportion

    开始名次(startRank)= 该等级之前的所有等级人数总和+1

    结束名次(endRank)=开始名次(startRank)+等级人数(totalNum)-1

    注意:如果依次从上往下计算直接算就行,但是场景中涉及到先填写下面的等级,然后再填上面的等级,或则填写以后再去掉的情况。

    解决方案:占比添加blur事件,每次失去焦点以后,计算所有的等级名次,而不是只计算该占比对应的名次

    代码实现:

    import { sumBy, slice } from 'lodash'

    用到了lodash的两个函数

    _.sumBy类似_.sum方法,区别是传入一个iteratee方法在遍历数组的时候对每个元素调用以生成要被计算加和的值;

    _.slice(array, [start=0], [end=array.length])
    裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。

     computeRanking() {
          // 每次都计算整个数组的的名次
          //ruleList为表格中的数据
    
          ruleList.forEach((rule, index) => {
            if (rule.proportion) {
            //四舍五入,计算所有等级的人数
              rule.totalNum = Math.round((this.companyNumber * rule.proportion) / 100)
            } else {
              rule.totalNum = 0
            }
    
            if (rule.totalNum) {
              rule.startRank =
                sumBy(slice(ruleList, 0, index), function(o) {
                  return o.totalNum
                }) + 1
              rule.endRank = rule.startRank + rule.totalNum - 1
              rule.ranking = rule.startRank + '-' + rule.endRank
            } else {
              rule.startRank = ''
              rule.endRank = ''
              rule.ranking = ''
            }
          })
          this.$forceUpdate()
        },
  • 相关阅读:
    C connect实现Timeout效果(Linux)
    QSS网址
    C实现读写文件
    crond守护进程实现定时监控某进程占有内存的大小
    Ubuntu17安装Chrome有效
    Ubuntu16安装wine(转)
    直方图均衡化
    函数后面的const修饰符的作用
    C 线程学习记录
    Override Fuction 调用——到底使用的是谁的函数
  • 原文地址:https://www.cnblogs.com/jiayuexuan/p/15632073.html
Copyright © 2020-2023  润新知