【问题标题】:Js lodash return the same sample every timeJs lodash每次返回相同的样本
【发布时间】:2023-04-06 14:33:02
【问题描述】:

我想用 lodash 生成样本,它会为每一行返回相同的数字。我做错了什么?

var primaryNumsCells = _.range(50);
var extraNumsCells = _.range(20);

var lottery = {lineConfigurations: []};


var numsConfig = {lineNumbers: {}};

    for( var i = 0; i < 2; i ++ ) {

      numsConfig.lineNumbers.primaryNumbers = _.sample(primaryNumsCells, 5);
      numsConfig.lineNumbers.secondaryNumbers = _.sample(extraNumsCells, 2);
      lottery.lineConfigurations.push(numsConfig);
    }

console.log(lottery);

第一个对象和第二个对象的主次编号结果是一样的;

这里是小提琴: http://jsbin.com/vavuhunupi/1/edit

【问题讨论】:

    标签: javascript object lodash


    【解决方案1】:

    在循环内创建一个 new 对象。使用普通的对象文字很容易(删除变量):

    var lottery = {lineConfigurations: []};
    for (var i = 0; i < 2; i++) {
      lottery.lineConfigurations.push({
        lineNumbers: {
          primaryNumbers: _.sample(primaryNumsCells, 5),
          secondaryNumbers: _.sample(extraNumsCells, 2)
        }
      });
    }
    

    就目前而言,在循环的每个步骤中,您都修改并推送同一个对象(存储在numsConfig var 中)。


    这里有一种做同样事情的笨拙方式:

    var lottery = {
      lineConfigurations: _.map(_.range(2), function() {
        return {
          lineNumbers: {
            primaryNumbers: _.sample(primaryNumsCells, 5),
            secondaryNumbers: _.sample(extraNumsCells, 2)
          }
        };
      })
    };
    

    【讨论】:

    • 很好用,谢谢,我会尽可能将其标记为答案 :)
    猜你喜欢
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多