gpt4 book ai didi

Javascript 天输出为范围格式?

转载 作者:行者123 更新时间:2023-11-29 16:41:40 24 4
gpt4 key购买 nike

我有一个 javascript 对象,其中包含一周中的日期和一个 true/false 值(如果它们已被选择)。

然后,我将此对象传递给一个函数,在该函数中我需要以特定方式格式化日期并返回它。

本质上,如果任何日期跟随另一天,这也是正确的,它会将这些选定的日期显示为一个范围,例如 M-F。如果选择的日期是 M, T, F 那么输出将是 M-T, F

以下是我尝试进行设置的示例:

// Define our selected days
var days = {
sunday: true,
monday: false,
tuesday: false,
wednesday: true,
thursday: true,
friday: false,
saturday: false
};

// Format our dates
function formatDates(days) {
// Logic Here
return days;
}

console.log(formatDates(days));

// Scenarios

/* Input
1: Checked: Su, W, Th
2: Checked: Su, M, T, Sa
3: Checked: M, T, Th, Sa
4: Checked: T, Th, Sa, Sun
/*

/*
Output
1: Su, W, Th
2: Sa - T
3: M - T, Th, Sa
4: Sa - Su, T, Th
/*

这是上面代码的一个 fiddle :https://jsfiddle.net/ghs3Lthj/1

问题:是否有任何我应该注意的日期函数可以处理这样的范围,或者是否需要自定义?

只是不确定是否存在任何我可以说“以范围样式格式显示这些天”的内容。

最佳答案

由于对象中的属性没有保证顺序,因此您最好使用数组。当顺序很重要时,数组是合适的。

此外,您还需要定义每一天的缩写。

所以我建议这个结构:

var days = [
{ name: "sunday", abbrev: "Su", selected: true },
{ name: "monday", abbrev: "M", selected: false },
{ name: "tuesday", abbrev: "Tu", selected: false },
{ name: "wednesday", abbrev: "W", selected: true },
{ name: "thursday", abbrev: "Th", selected: true },
{ name: "friday", abbrev: "F", selected: false },
{ name: "saturday", abbrev: "Sa", selected: false }
];

然后,我将创建一个包含所有选定日期的简单逗号分隔字符串,然后使用字符串替换来获得所需的格式:

function formatDates(days) {
return days.map( day => day.selected ? day.abbrev : "" )
.join(", ")
.replace(/(\w+)(?:, \w+)*, (\w+)/g, "$1 - $2") // insert hyphen were appropriate
.replace(/^(, )+|, (?=,|$)/g, "") // remove commas we don't need
}

var days = [
{ name: "sunday", abbrev: "Su", selected: true },
{ name: "monday", abbrev: "M", selected: false },
{ name: "tuesday", abbrev: "Tu", selected: false },
{ name: "wednesday", abbrev: "W", selected: true },
{ name: "thursday", abbrev: "Th", selected: true },
{ name: "friday", abbrev: "F", selected: false },
{ name: "saturday", abbrev: "Sa", selected: false }
];

console.log(formatDates(days));

注意:即使使用逗号也可以,连续的天数也将用连字符显示。如果您更喜欢在这种情况下使用逗号,请将第一个正则表达式中的 * 替换为 +

关于Javascript 天输出为范围格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com