我有一個數組。該數組可以包含1到7個唯一的日期名稱字符串。從星期一到星期日,星期幾的名字將是順序的。 - 如:在javascript中排列天數
[「星期二」,「星期四」,「太陽報」]
我想,這樣的順序將與今天開始使用JavaScript來排序該數組。
即:假如今天是星期五,然後排序數組應該是
[「太陽報」,「星期二」,「星期四」]
如果今天是星期四,則排序後的數組應該
[ 「星期四」, 「太陽報」, 「星期二」]
燦有人幫忙嗎?
我有一個數組。該數組可以包含1到7個唯一的日期名稱字符串。從星期一到星期日,星期幾的名字將是順序的。 - 如:在javascript中排列天數
[「星期二」,「星期四」,「太陽報」]
我想,這樣的順序將與今天開始使用JavaScript來排序該數組。
即:假如今天是星期五,然後排序數組應該是
[「太陽報」,「星期二」,「星期四」]
如果今天是星期四,則排序後的數組應該
[ 「星期四」, 「太陽報」, 「星期二」]
燦有人幫忙嗎?
function sort_days(days) {
要獲得今天的星期幾,請使用new Date().getDay()
。這假定Sunday = 0, Monday = 1, ..., Saturday = 6
。
var day_of_week = new Date().getDay();
要生成的一週中各天的列表,然後切片名稱的列表:
var list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var sorted_list = list.slice(day_of_week).concat(list.slice(0,day_of_week));
(今天是星期五,所以sorted_list
是['Fri','Sat','Sun','Mon','Tue','Wed','Thu']
)
最後,排序,使用indexOf
:
return days.sort(function(a,b) { return sorted_list.indexOf(a) > sorted_list.indexOf(b); });
}
全部放在一起:
function sort_days(days) {
var day_of_week = new Date().getDay();
var list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var sorted_list = list.slice(day_of_week).concat(list.slice(0,day_of_week));
return days.sort(function(a,b) { return sorted_list.indexOf(a) > sorted_list.indexOf(b); });
}
謝謝你。這似乎是最有效的方法。 – CMH
這是我想出了一個功能:
function sortDays(days) {
var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var today = new Date().getDay();
for (var i=0;i<today;i++) daysOfWeek.push(daysOfWeek.shift());
return daysOfWeek.filter(function(d) { return days.indexOf(d) >= 0; });
}
的總體思路是:從開始到結束以關閉今天是什麼日子轉動元件重新安排一週的日子。然後,您使用該順序重新排列輸入數組以匹配。我只是根據輸入數組的內容過濾了daysOfWeek
數組,而不是實際排序。
我不確定Array.filter
支持的程度如何,所以您可能希望將其更改爲泛型for循環,取決於您想要支持的瀏覽器。
Here's a jsfiddle你也可以在那裏玩。
或者,你可以使用內置的Array.sort
方法如下類似的策略:
var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
{
var today = new Date().getDay();
for (var i=0;i<today;i++) daysOfWeek.push(daysOfWeek.shift());
}
function daysOfWeekSorter(x,y) {
return daysOfWeek.indexOf(x)-daysOfWeek.indexOf(y);
}
var myDays = ["Tue", "Thu", "Sun"];
myDays.sort(daysOfWeekSorter);
而且here's another fiddle一起玩。
非常感謝!我只是使用沒有循環的答案,因爲它看起來更有效率。 – CMH
以防萬一,我們曾經設法獲得或失去了一天,我已經建立了礦不需要硬編碼的一日清單:)這裏的希望有一天,我們得到了週六和週日之間的額外24小時!
function anyDayNow(dys) {
var ret = [], cur = new Date(), today = cur.getUTCDay(), txt;
do {
txt = cur.toUTCString().split(',')[0];
dys.indexOf(txt)!=-1 && ret.push(txt);
cur.setUTCDate(cur.getUTCDate() + 1);
} while (cur.getUTCDay() != today);
return ret;
}
console.log(anyDayNow(["Tue", "Thu", "Sun"]));
function sortDaysByToday(ds){
var days = {Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6},
today = new Date().getDay()
return ds.sort(function(a,b){
return (days[a] < today ? days[a] + 7 : days[a])
- (days[b] < today ? days[b] + 7 : days[b])
})
}
這裏有一個簡單的方法只使用的indexOf,數組的拼接濾波器和CONCAT功能,無需循環:
function sortMyArray(toSort) {
var today = new Date().toUTCString().substr(0, 3), //get today as 3 letter string
list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], // days list
before = list.splice(0, list.indexOf(today)); // splice what is before today in the list
list = list.concat(before); // concat the list with what was spliced
return list.filter(function (item) { return toSort.indexOf(item) !== -1}); // return the sorted list with only the asked days
}
使用
console.log(sortMyArray(["Tue", "Thu", "Sun"]));
我喜歡這種方式不需要循環或排序,但它實際上並不適用於數組的順序。在上面的示例中,toSort的順序是[「Tue」,「Thu」,「Sun 「]開始。 – CMH
哦,即使當天不在陣列中,我也沒有看到你想要排序。 – dievardump
我用現在的一個.filter更新了我的答案 – dievardump
const days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
const sortDays = function (a, b) {
a = days.indexOf(a);
b = days.indexOf(b);
return a < b ? 0 : 1;
};
const myArrayOfDays = ["Tuesday", "Saturday", "Monday", "Thursday"].sort(sortDays);
// returns ["Monday", "Tuesday", "Thursday", "Saturday"];
那麼到目前爲止你嘗試過了什麼?請發佈您的代碼和現場演示,以便我們提供幫助。 – elclanrs