Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
287 views
in Technique[技术] by (71.8m points)

求助大佬JS微信轮换如何设置显示权重?

现在有一组微信号轮显:abc123,bcd245,cbd345,dfg456,aaa555,bbb666

分时段显示,比如9-12点是abc123,bcd245,cbd345,13-15点是bcd245,cbd345,dfg456,aaa555,16-18点是abc123,bcd245,cbd345,dfg456,aaa555,bbb666

再就是可否给每一个号设置一个权重,比如权重值高的展现的更多一些,权重低的展现少些,正常是2分钟换一个?其他的就不按顺序随机轮换。(可否将权重最高值设为9,最低1)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
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},
])

屏幕快照 2020-05-03 下午2.40.57.png


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to MLink Developer Q&A Community for programmer and developer-Open, Learning and Share
...