zoukankan      html  css  js  c++  java
  • 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()
        },
  • 相关阅读:
    红黑树在不同场景的应用及其优势
    微信抢红包简单实现(随机分配金额、并发控制)
    日志采集常见组件优劣势
    LayUIAdminPro使用
    DevExpress中Text和EditValue封装数据示例
    NPOI读取Excel日期类型单元格返回一串数字问题(2020-08-15 变成 12-5月-2020了)
    Win 10 64位 注册 Grid++ Report 控件
    C# EF 读取App.config连接字符串
    EF 用到的两个类
    Jason实现DataTable和List互转
  • 原文地址:https://www.cnblogs.com/jiayuexuan/p/15632073.html
Copyright © 2011-2022 走看看