function createRandomItemFun(items) {
const unit = items.reduce((res, v) => res + v.level, 0);
const avg = 100 / unit;
const nums = items.reduce((res, v, i) => {
res.push( (res[i-1] || 0) + avg * v.level);
return res;
}, []);
return function getRandomItem() {
const value = Math.random() * 100;
return items[ nums.findIndex(v => v >= value) ];
}
}
function test(items) {
var getRandomItem = createRandomItemFun(items)
// 统计输出次数
for(let i = 0; i<100;i++) {
var item = getRandomItem();
item.count = (item.count||0)+1;
}
console.log(items)
}
test([
{name: '1', level: 1},
{name: '2', level: 1},
{name: '3', level: 1},
{name: '4', level: 1},
])
test([
{name: '1', level: 1},
{name: '2', level: 1},
{name: '3', level: 4},
{name: '4', level: 4},
])
test([
{name: '1', level: 1},
{name: '2', level: 1},
{name: '3', level: 1},
{name: '4', level: 7},
])
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…