根据权重数组随机出一个序号/数据
/** * 根据权重数组随机出一个序号/数据 * weightArr: 权重数组,比如[30, 50, 20],随机出0的概率为30%,随机出1的概率为50%,随机出2的概率为20% * dataArr: 数据数组,如果包含该数组,则从该数组取值 */ public getRandomDataByWeightArr(weightArr: Array<number>, dataArr?: Array<any>) { let randomNum = Math.random() let totalWeight = 0 weightArr.forEach((w) => { totalWeight += w }) let curWeight = 0 for (let i = 0; i < weightArr.length; i++) { curWeight += weightArr[i] if (randomNum < curWeight / totalWeight) { return dataArr ? dataArr[i] : i } } return dataArr ? dataArr[weightArr.length - 1] : weightArr.length - 1 }