庚辰腊七木头鱼 2021-08-01 02:14 采纳率: 100%
浏览 40
已结题

NodeJS,看发帖的点就知道现在有多无奈了

financings是一个对象数组,我想对他进行打乱,并将结果数组压入plan数组,但我遇到的问题是:所有的item,都是一致的,我本想将return后面的小数用math.random代替,打乱的结果是也一致,但确实打乱了一次,我想知道如何让这个financings真正打乱了5次,这段代码是在一个nodejs 的app.get()里
img

下面是我用了洗牌算法写的,还是一样

app.post('/api/plot/assetSearch', (req, res) => {
    var plan=[]
    function shuffle(array) {
        var currentIndex = array.length,  randomIndex;
      
        // While there remain elements to shuffle...
        while (0 !== currentIndex) {
      
          // Pick a remaining element...
          randomIndex = Math.floor(Math.random() * currentIndex);
          currentIndex--;
      
          // And swap it with the current element.
          [array[currentIndex], array[randomIndex]] = [
            array[randomIndex], array[currentIndex]];
        }
      
        return array;
      }
                var a = [{name:1},{name:2},{name:3},{name:4},{name:5}]
        var b =[]
            for(var i=0;i<=2;i++){
             b=shuffle(a)
            console.log("b",b)
        }
             for(var i=0;i<=2;i++){
              shuffle(a)
              console.log("b",a)
        }
        console.log("打乱后的5个备选方案为",plan)
}

  • 写回答

1条回答 默认 最新

  • 关注

    因为sort()方法和你的洗牌算法都是对原数组对象自身进行排序(打乱),返回值也是原数组对象自身的引用。不会产生新的数组对象。
    所以你所有的item都是同一个数组对象的引用。压入plan中的都是同一个数组对象。
    应该是在用sort()进行排序(打乱)前或者排序(打乱)后,把数组克隆一份,让压入plan中的都是不同的数组对象

    var plan=[]
    var a = [{name:1},{name:2},{name:3},{name:4},{name:5}]
    for(var i=0;i<5;i++){
        var b = a.slice(0); //把a数组克隆一份
        b.sort(function(){return Math.random()>0.5?1:-1;});
        plan.push(b);
    }
    console.log("打乱后的5个备选方案为",plan)
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 已采纳回答 8月1日
  • 创建了问题 8月1日

悬赏问题

  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误