【问题标题】:Javascript - Math.random inside nested loop returns same sequence every timeJavascript - 嵌套循环内的 Math.random 每次都返回相同的序列
【发布时间】:2021-03-24 09:26:05
【问题描述】:

我正在尝试随机化嵌套循环内的值:

let bools = {
  first: true,
  second: true,
  third: true,
  fourth: true,
  fifth: true,
};

results = [];
for (let i = 0; i < 3; i++) {
  for (let k in bools) {
    bools[k] = Math.random() > 0.5;
    console.log(bools[k]);
  }
  results.push({ i, bools });
}
console.log(results);

i 的每次迭代的结果都是相同的序列。我对此感到困惑并尝试了性能时间戳而不是随机数:

bools[k] = now() // from performance-now node package

并且它也为每次迭代返回了相同的精度时间戳序列。这告诉我的是内部循环只运行一次。为什么不是外部 for 循环的每次迭代?我怎样才能解决这个问题?谢谢 :)

【问题讨论】:

  • 您只需操作一个名为bools 的对象并将其多次插入result
  • 我看到你使用了results.push({ i, bools });。您对此有何期待?我不知道这是否真的是什么。像results.push({ i: bools }); 这样的东西会更好吗?还是两者做同样的事情?
  • @Rojo 它仍然是同一个对象插入多个插槽

标签: javascript for-loop random nested-loops


【解决方案1】:

尝试替换:

 results.push({ i, bools });

与:

    results.push({ i, bools: Object.assign({}, bools) });

你不断地引用同一个对象'bools'并不断地覆盖它,所以最后你会在'results'数组的每个元素中看到最后一次迭代的结果。 另一方面,'Object.assign({}, bools) 每次都从 'bools' 引用创建新对象。 阅读它here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    相关资源
    最近更新 更多