All files / angle-util/src NumberUtil.ts

0% Statements 0/14
0% Branches 0/14
0% Functions 0/2
0% Lines 0/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67                                                                                                                                     
/**
 * this util module is about to provide number support utils
 * @module angle-util/numberUtil
 */
export default {
  /**
   * 生成随机数
   * @author youngbeen
   * @param { integer } [diceLimit] - 生成的随机数上限值(包含该值),默认为9,不能传入0!
   * @param { integer } [diceBase] - 生成的随机数下限值(包含该值),默认为0
   * @return { integer } 生成的随机数
   * @example
   * console.log(numberUtil.random())    // '默认生成0~9的随机数(包含0和9)'
   * console.log(numberUtil.random(3))    // '生成0~3的随机数(包含0和3)'
   * console.log(numberUtil.random(3, 1))    // '生成1~3的随机数(包含1和3)'
   * console.log(numberUtil.random(3, 6))    // '传入了错误的下限值,将生成3~3的随机数(即永远返回3)'
   */
  random (diceLimit: number = 9, diceBase: number = 0): number {
    // 起始点默认为0,最高点默认为9
    // 若起始点比最高点还高的情况,修正为起始点等于最高点
    diceBase > diceLimit ? diceBase = diceLimit : diceBase
 
    let diceEnd: number = diceLimit - diceBase + 1
 
    let myRoll: number = Math.floor(Math.random() * diceEnd) + diceBase
    return myRoll
  },
  /**
   * 批量生成随机数
   * @author youngbeen
   * @param { integer } [diceNum] - 生成随机数个数,默认生成2个
   * @param { integer } [diceLimit] - 生成的随机数上限值(包含该值),默认为9
   * @param { integer } [diceBase] - 生成的随机数下限值(包含该值),默认为0
   * @param { boolean } [isDuplicate] - 生成的随机数是否可重复,默认false不重复
   * @return { array } 生成的随机数数组
   * @example
   * console.log(numberUtil.multiRandom())    // '默认生成2个随机数,生成区间0~9(包含0和9),随机数不重复,例如返回[3, 9]'
   * console.log(numberUtil.multiRandom(5))    // '生成5个随机数,生成区间0~9(包含0和9),随机数不重复,例如返回[3, 9, 0, 2, 8]'
   * console.log(numberUtil.multiRandom(3, 6, 1))    // '生成3个随机数,生成区间1~6(包含1和6),随机数不重复,例如返回[3, 1, 5]'
   * console.log(numberUtil.multiRandom(8, 6, 1, true))    // '生成8个随机数,生成区间1~6(包含1和6),随机数可重复,例如返回[3, 1, 5, 2, 3, 6, 2, 5]'
   */
  multiRandom (diceNum: number = 2, diceLimit: number = 9, diceBase: number = 0, isDuplicate: boolean = false): Array<number> {
    // 默认生成2个随机数,起始点默认为0,最高点默认为9,默认不允许重复
    let generatedDices: Array<number> = []
 
    for (let i: number = 0; i < diceNum; i++) {
      // 循环生成随机数
      let dice: number = this.random(diceLimit, diceBase)
      if (!isDuplicate && generatedDices.indexOf(dice) !== -1) {
        // 不允许重复,而且已经确定重复的情况
        // 不加入结果,撤销自增
        i--
      } else {
        // 合法的dice,放入数组
        generatedDices.push(dice)
      }
    }
 
    // 测试检验用,看生成的dice数量是否达标
    if (generatedDices.length !== diceNum) {
      console.warn('Error: wrong random result counts in multiRandom()@NumberUtil')
    }
 
    return generatedDices
  }
}