Javascript 试图为循环生成一个随机数,但没有';我好像不工作。为什么会这样?

Javascript 试图为循环生成一个随机数,但没有';我好像不工作。为什么会这样?,javascript,Javascript,所以我试着做一个循环,但我需要一个随机数来让它真正起作用 var j=0; while(j < patrons.length){ var books = patrons[j].booksOut; var fine = patrons[j].fine; var randomnumber = Math.floor(Math.random() * (20 - 5 + 1)) + 1; //the random number for(var i=randomnumber;i<

所以我试着做一个循环,但我需要一个随机数来让它真正起作用

var j=0;
while(j < patrons.length){
  var books = patrons[j].booksOut;
  var fine = patrons[j].fine;
  var randomnumber = Math.floor(Math.random() * (20 - 5 + 1)) + 1; //the random number
  for(var i=randomnumber;i<books.length;i++){ //me trying to replace i with the random number
    if(books[i].isOverdue()){
      fine = fine + 5.00;
    }
  }
  patrons[j].fine = fine;
  j++;
}
var j=0;
而(j<用户长度){
var books=用户[j]。booksOut;
var fine=用户[j]。罚款;
var randomnumber=Math.floor(Math.random()*(20-5+1))+1;//随机数

对于(var i=randomnumber;i没有用户样本值的情况,我能提供的最好方法是使用
books.length
作为您的最大值。您为什么还要随机选择它们?您是否正在尝试解决更广泛的问题

const isOverdue = () => true;
const patrons = [
  { booksOut: [{ isOverdue }], fine: 1.0 },
  { booksOut: [{ isOverdue }], fine: 2.0 },
  { booksOut: [{ isOverdue }], fine: 3.0 },
];
let j = 0;
while(j < patrons.length) {
  const books = patrons[j].booksOut;
  let fine = patrons[j].fine;
  const randomnumber = Math.floor(Math.random() * books.length);

  for(let i = randomnumber; i < books.length; i++) {
    if(books[i].isOverdue()) {
      fine += 5.00;
    }
  }
  patrons[j].fine = fine;
  j += 1;
}

console.log(JSON.stringify(patrons, null, 2));

类似上面的内容将使
isOverdue()
随机回答是或否。

在您提供的示例中,您使用
new Date()
设置每本书的签出日期,将其设置为执行时间


因此,当您调用
isOverdue()
时,它总是检查今天减去现在是否等于14天,这是永远不会的,所以
isOverdue()
将始终返回false。

随机数不考虑书籍的数量。如果生成的数字大于或等于
书籍,会发生什么情况。长度
?嗯,随机数将从1到17(为什么是这个范围?)…books数组中有多少项?您得到的错误是什么?尝试记录您生成的随机数,并检查它是否大于
books.length
@DanielBernsons-可能没有错误-如果
randomname>=books.length
,则for循环永远不会出现runs@JaromandaX同意,就是这样最符合逻辑,但也可能是isOverdue函数中的错误。可能这是一个典型的XY问题。我正在尝试生成一个随机数,以便触发过期函数,并使用该随机数使用户可以获得罚款。可能需要将随机数放入
Book.prototype.isOverdue()
这样它就可以随机决定什么时候过期。
const isOverdue = () => true;
const patrons = [
  { booksOut: [{ isOverdue }], fine: 1.0 },
  { booksOut: [{ isOverdue }], fine: 2.0 },
  { booksOut: [{ isOverdue }], fine: 3.0 },
];
let j = 0;
while(j < patrons.length) {
  const books = patrons[j].booksOut;
  let fine = patrons[j].fine;
  const randomnumber = Math.floor(Math.random() * books.length);

  for(let i = randomnumber; i < books.length; i++) {
    if(books[i].isOverdue()) {
      fine += 5.00;
    }
  }
  patrons[j].fine = fine;
  j += 1;
}

console.log(JSON.stringify(patrons, null, 2));
Book.prototype.isOverdue = function() {
  return [true, false][Math.floor(Math.random() * 2)]
}