2017-05-22 33 views
3

所以我想要得到一個天數的數組,在特定的範圍內,符合 ISOWeekday(返回1-7其中1是星期一,7是星期天)Javascript獲取星期幾範圍數字數組之間的天數,符合ISOWeekday

所以,如果一個工作周開始於星期日(7)和Thuesday(4)結束,

我需要輸出數組: 7,1,2,3,4

const startWeek = 7; 
 
const endWeek = 4; 
 
for (let i = 1; i < 7; i++) { 
 
    if (i > startWeek && i < endWeek) { 
 
    console.log(i); 
 
    } 
 
}

+1

雅這樣的地方,我<= 7,你如果條件可以成爲這樣的事情,如果(我> = startWeek &&我<= endWeek){} – zenwraight

+0

有什麼問題就在這裏? – zenwraight

回答

6

可以使用模運算,這樣的:

const startWeek = 7; 
 
const endWeek = 4; 
 
for (let i = 0; i <= (endWeek + 7 - startWeek) % 7; i++) { 
 
    let week = (startWeek + i - 1) % 7 + 1; 
 
    console.log(week); 
 
}

寫在一個功能性的方式使用Array.from回調函數的參數:

const startWeek = 7; 
 
const endWeek = 4; 
 
var weeks = Array.from(Array((endWeek + 7 - startWeek) % 7 + 1), 
 
         (_,i) => (startWeek + i - 1) % 7 + 1); 
 
console.log(weeks);

+0

真棒!!! .... –

+0

有我的寶寶:))謝謝!!! – BenNov

1

您可以使用按位運算爲數字範圍指定上限。

例如,從5周圍3循環:

5 & 7 == 5 
6 & 7 == 6 
7 & 7 == 7 
8 & 7 == 0 
9 & 7 == 1 
10 & 7 == 2 
11 & 7 == 3 

但是,你不想8給你7;你想它給你1.所以試模數:

5 % 7 == 5 
6 % 7 == 6 
7 % 7 == 0 
8 % 7 == 1 
9 % 7 == 2 
10 % 7 == 3 
11 % 7 == 4 

但是這樣會導致7給你一個0!

所以,你可以零索引的格式(使其0-6,不1-7)和使用的方法之一以上

或者,你可以在你的代碼添加角落案件像這樣:

if (x == 8) 
x++; 

對於模數:

if (x == 7) 
x++;