Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果没有一堆if-else语句,我如何编写这个函数?_Javascript - Fatal编程技术网

Javascript 如果没有一堆if-else语句,我如何编写这个函数?

Javascript 如果没有一堆if-else语句,我如何编写这个函数?,javascript,Javascript,我基本上就是搞不懂这个,也不想破解它 如果我在一年中这样做52周的话,看起来会很混乱 有什么建议吗 更新 这个问题不是关于获取今年的当前周 这个问题是关于从定义日期起经过几周 我希望下周的训练在本周的第6天出现;) 示例 我开始工作后的日子是99:2018-05-30 18:39:29 你的一些例子在第15周向我展示 然而,我的代码显示了第16周,这是正确的。看到警告了吗 calculateUsersCurrentWorkoutWeek: function(timestamp) {

我基本上就是搞不懂这个,也不想破解它

如果我在一年中这样做52周的话,看起来会很混乱

有什么建议吗

更新

这个问题不是关于获取今年的当前周

这个问题是关于从定义日期起经过几周

我希望下周的训练在本周的第6天出现;)

示例

我开始工作后的日子是99:2018-05-30 18:39:29

你的一些例子在第15周向我展示

然而,我的代码显示了第16周,这是正确的。看到警告了吗

  calculateUsersCurrentWorkoutWeek: function(timestamp) {
            let daysSinceSignup = moment().diff(timestamp, "days");
            if (daysSinceSignup <= 6) {
              return 1;
            } else if (daysSinceSignup > 6 && daysSinceSignup <= 13) {
              return 2;
            } else if (daysSinceSignup > 13 && daysSinceSignup <= 20) {
              return 3;
            } else if (daysSinceSignup > 20 && daysSinceSignup <= 27) {
              return 4;
            } else if (daysSinceSignup > 27 && daysSinceSignup <= 34) {
              return 5;
            } else if (daysSinceSignup > 34 && daysSinceSignup <= 41) {
              return 6;
            } else if (daysSinceSignup > 41 && daysSinceSignup <= 48) {
              return 7;
            } else if (daysSinceSignup > 48 && daysSinceSignup <= 55) {
              return 8;
            } else if (daysSinceSignup > 55 && daysSinceSignup <= 62) {
              return 9;
            } else if (daysSinceSignup > 55 && daysSinceSignup <= 62) {
              return 10;
            } else if (daysSinceSignup > 62 && daysSinceSignup <= 69) {
              return 11;
            } else if (daysSinceSignup > 69 && daysSinceSignup <= 76) {
              return 12;
            } else if (daysSinceSignup > 76 && daysSinceSignup <= 83) {
              return 13;
            } else if (daysSinceSignup > 83 && daysSinceSignup <= 90) {
              return 14;
            } else if (daysSinceSignup > 90 && daysSinceSignup <= 97) {
              return 15;
            } else {
              return 16;
            }
          }
calculateUsersCurrentWorkoutWeek:函数(时间戳){
让daysSinceSignup=moment().diff(时间戳,“天”);
如果(DaysSign 6和DaysSign 13和DaysSign 20和DaysSign 27和DaysSign 34和DaysSign 41和DaysSign 48和DaysSign 55和DaysSign 55和DaysSign 62和DaysSign 69和DaysSign 76和DaysSign 83和DaysSign 90和DaysSignY7和ceil

const daysSinceSignup = moment().diff(timestamp, "days");
return Math.ceil(daysSinceSignup / 7);
你错过了今天早上的咖啡吗?;-)


注意:上面的函数将告诉您“自<代码>时间戳以来的周数”,这是我从您的文本中了解到的,但您的代码示例没有反映出来

要获得与代码示例相同的结果,您需要
.floor()
并添加1而不是
.ceil()


您可以将数据放入数组并使用array.find:

var数据=[
{min:-无穷大,max:6,ret:1},
{min:6,max:13,ret:2},
{min:13,max:20,ret:3},
{最小值:20,最大值:27,ret:4}
];
函数计算serscurrentworkoutweek(daysSinceSignup){
返回datas.find({min,max})=>

daysSinceSignup>min&&daysSinceSignup正如@Michel所说,除以7和floor+1

calculateUsersCurrentWorkoutWeek: function(timestamp) {
    let daysSinceSignup = moment().diff(timestamp, "days");
    return Math.floor(daysSinceSignup / 7) + 1;
}

简单的方法还可以是按升序创建一个整数数组,以便值包含比较的上限。然后,对于
daysSinceSignup
的每个值,您可以找到索引并向其添加
1
,因为您需要返回值为
1
2
3
,…等等。这如果您没有统一的时间间隔,将非常有用,例如当前时间间隔始终为
7
,因此
division
ceil
方法也可以工作,但如果时间间隔不统一,则此方法可能非常有用

var indexArray=[6,13,20,27,34,41,48,55,62,69,76,83,90,97];
函数calculateUsersCurrentWorkoutWeek(){
让daysSinceSignup=14;
var elemIndex=indexArray.findIndex((项目)=>item>daysSinceSignup);
返回elemIndex+1;
}

console.log(calculateUsersCurrentWorkoutWeek());
您要查找的是

return Math.ceil((daysSinceStartup + 1) / 7);

对于-1和62之间的任何实数,这将给出与代码相同的结果(因为在62左右,您忘记替换复制的范围)。它返回1表示6天,返回2表示6.01天,与原始代码一样。

除以7和下限?这会给我如if-else中所示的准确结果吗?它精确地控制事情。实际上,这是用于显示每周训练,我希望下周的训练在每周的第7天之前显示,所以提前一天显示。@Michel this是错误的。我想在下周的第6天展示。@Rajesh从技术上说你是对的。但是看看OPs问题,他想要一个
训练周
,所以我怀疑实际的一天无关紧要。你只需要在健身房按照一周的计划进行单调的训练,这样你就可以事后去酒吧而不必感到内疚;-)@Ali Gajini。不,不是。你在第9周和第10周的代码中有一个错误:相同的
两倍,如果(…)
用于不同的周数。你需要
Math.floor
正如OP所希望的
他希望它等于1,但我认为
+1
是必要的,因为他希望7等于2,即使函数名称在语义上有误。
0
返回
0
,而不是
1
6.5+7*n
对于任何整数
n
返回
n
而不是
n+1
。不确定这是否重要。最后,这不包括
if
else
,只包括所有
else if
语句。我注意到答案中有一个问题。如果开始日期=今天,它会给我第0周?很好的尝试,但我正在寻找答案寻找更干净、更神奇的东西。
return Math.ceil((daysSinceStartup + 1) / 7);