求助大佬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)

已解决 悬赏分:10 - 解决时间 2022-01-05 00:42
反对 0举报 0 收藏 0

回答3

最佳
  • @
    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

    支持 0 反对 0 举报
    2022-01-04 07:28
  • @

    分时段显示,你需要后台存储时段信息,然后前台js比对根据不同的时段显示不同号。

    支持 0 反对 0 举报
    2022-01-04 07:37
  • @

    首先说一下,你这个轮显的规则很迷呀。。。

    举个例子吧。号码池有六个号,等额分三份。(微信等额红包)

    1. 9-12 随机选择两个
    2. 13-15 随机选择两个
    3. 13-15 显示剩下的

    如果是,号码池有六个号,随机分三份。(微信随机红包)

    1. 9-12 随机选择1-2个
    2. 13-15 随机选择1-3个
    3. 13-15 显示剩下的

    然后就是你说的权重问题。既然有权重,那么还随机?
    当然也不是不能做啊,比如1号的权重是2,其他的都是1,那么我可以认为我的号码池有七个号码,只不过选中了1号会一次消失两个号码。

    支持 0 反对 0 举报
    2022-01-04 08:25