有没有办法使活动花费的总时间始终为24小时

时间:2019-01-07 17:48:21

标签: javascript arrays object

我想随机产生某人每天从事各种活动的小时数。

我创建了一个对象,该对象将存储对象键(活动),其值(小时)和一个用于存储它们的数组。我还使用了一种随机方法来生成小时数,并确保在随机生成下一个对象属性之前,每个初始值都不会超过24小时。但是我需要几个小时才能总和为24小时。

 let organised = new Object(),
    pworks = null,
    commutes = null,
    fun = null,
    work = false;
    let arr= [];
   if(!work){ 
       organised.pworks = Math.floor(Math.random()*24)
       if(organised.pworks < 24){
           console.log('you spend ' + organised.pworks+'hrs' + ' on Primary Work' )
          arr.push(organised.pworks)
          organised.commutes = Math.floor(Math.random()*24)
          if(organised.commutes + organised.pworks < 24){
            arr.push(organised.commutes)
            console.log('you spend ' + organised.commutes+'hrs' + ' on Commute' )
            organised.fun = Math.floor(Math.random()*24)
            if(organised.commutes + organised.pworks + organised.fun <= 24){
            console.log('you spend ' + organised.fun+'hrs' + ' on having Fun' )
    arr.push(organised.fun)
  }
}

} }

您在基本工作上花费了6个小时 你花10个小时上下班 您花了8个小时来享受乐趣

1 个答案:

答案 0 :(得分:2)

您需要选择在离开的时间内而不是整整24小时内随机产生的随机值。例如,这是不正确的:

organised.commutes = Math.floor(Math.random() * 24);

...因为这不允许organized.pworks花费的时间。所以:

organised.commutes = Math.floor(Math.random() * (24 - organized.pworks));

...等等,对于下一个,以此类推,必须同时允许organized.pworksorganized.commute。保持跑步状态可能很方便,因此您不必继续添加其他属性:

var remaining = 24;
organised.pworks = Math.floor(Math.random() * remaining);
remaining -= organised.pworks;
// ...
organised.commutes = Math.floor(Math.random() * remaining);
remaining -= organised.commutes;
// ...

那么您可能不希望最后一个值是随机值,而只需要剩余时间:

organised.fun = remaining;