![](/img/trans.png)
[英]How can i write this Function with Ifs to have corresponding else statements
[英]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
到它,因為你需要返回值1
, 2
, 3
,...等等。 如果你沒有統一的間隔,這將是有用的,就像目前間隔總是7
所以division
和ceil
方法也可以工作,但如果間隔不均勻,那么這種方法可能真的很有用。
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.