簡體   English   中英

如果沒有一堆if else語句,我怎么能寫這個函數呢?

[英]How can I write this function without a bunch of if else statements?

我基本上只是想不出這個,不想破解它。

如果我這樣做一年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;
            }
          }

除以7和ceil?

const daysSinceSignup = moment().diff(timestamp, "days");
return Math.ceil(daysSinceSignup / 7);

你今天早上錯過了咖啡嗎? ;-)


注意:上面的函數會告訴您“自timestamp以來的周數”,這是我從您的文本中理解的,但您的代碼示例並未反映出來。

要獲得相同的代碼示例結果,您需要.floor()並添加1而不是.ceil()

const daysSinceSignup = moment().diff(timestamp, "days");
return Math.floor(daysSinceSignup / 7) + 1;

正如@Michel所說,除以7和1 +

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

簡單的方法也可以是按升序創建整數數組,以便值包含比較的上限。 然后對於每個值daysSinceSignup你可以找到索引,並添加1到它,因為你需要返回值123 ,...等等。 如果你沒有統一的間隔,這將是有用的,就像目前間隔總是7所以divisionceil方法也可以工作,但如果間隔不均勻,那么這種方法可能真的很有用。

 var indexArray = [6,13,20,27,34,41,48,55,62,69,76,83,90,97]; function calculateUsersCurrentWorkoutWeek() { let daysSinceSignup = 14; var elemIndex = indexArray.findIndex((item)=> item > daysSinceSignup); return elemIndex+1; } console.log(calculateUsersCurrentWorkoutWeek()); 

你在尋找什么

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

這將給出與-1到62之間的任何實數的代碼相同的結果(因為大約62,您忘記替換復制的范圍)。 它返回1為6天,2為6.01天,就像原始代碼一樣。

您可以將數據放在數組中並使用array.find:

 var datas = [ { min: -Infinity, max: 6, ret: 1 }, { min: 6, max: 13, ret: 2 }, { min: 13, max: 20, ret: 3 }, { min: 20, max: 27, ret: 4 } ]; function calculateUsersCurrentWorkoutWeek(daysSinceSignup) { return datas.find(({min, max}) => daysSinceSignup > min && daysSinceSignup <= max ).ret; } console.log(calculateUsersCurrentWorkoutWeek(5)); console.log(calculateUsersCurrentWorkoutWeek(7)); console.log(calculateUsersCurrentWorkoutWeek(14)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM