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()
        },
  • 相关阅读:
    vue select 动态绑定下拉框-设置默认值
    .NetCore3.1 DESEncrypt加密解密、MD5加密
    .NetCore3.1跨域配置
    vs2019运行代码遇到:HTTP Error 500.19
    查找慢的Sql语句
    Sql Server有主外键关系时添加、删除数据
    SQL Server缺失索引及创建
    SQL Server 一些常用操作
    使用SQL Server DMV调整索引策略
    Aspose.Words 将word2中的内容插入到word1中的指定位置
  • 原文地址:https://www.cnblogs.com/jiayuexuan/p/15632073.html
Copyright © 2011-2022 走看看