从带有两个分隔符的字符串中推断出天数

时间:2017-01-19 22:55:03

标签: javascript arrays string date data-conversion

我有一个这样的字符串:

<星期一 - 星期四,太阳

我想使用javascript / jquery将其转换为以下内容:

星期一,星期二,星期三,星期四,阳光

任何人都有任何想法如何做到这一点?

抱歉@jonmrich我之前没有在这里发布过。我不知道我必须分享我已经研究过的东西。

我查看了其他一些Stack Overflow问题/解决方案 特别是

regex split string with two separators

From Jquery how to determine split delimiter?

但无法弄清楚从哪里开始。

下次我问时,我会做得更好......感谢抬头。

1 个答案:

答案 0 :(得分:0)

<强>解决方案

  • 创建一个包含天数缩写名称的数组。这在下面的示例中称为dayNames
  • 我们想要推断的字符串称为days,由逗号分隔的天数范围组成。
  • 已创建新数组dayCodes以存储相关日期的索引。此代码遍历范围(在本例中为Mon-Thur和Sun)并创建特定范围的参数。如果范围只有一天,则其起始值将等于其结束值。该数组将填充包含dayNames数组中的那些项的索引。
  • 刚刚创建了一个名为matchedDays的新数组,用于将索引与日期名称进行映射。迭代日代码(0-6)并向新数组推送与我们的代码匹配的dayNames数组的一部分。 slice功能非常方便。
  • 由于这是一个多维数组,我们希望将其展平。您可以使用arr.reduce((a,b) => a.concat(b))
  • 执行此操作

<强>小提琴

var dayNames = ["Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun"];
var days = "Mon - Thu, Sun"
var dayCodes = [];
var ranges = days.replace(/\s/g, "").split(",");
for (var i = 0; i < ranges.length; i++) {
    var parameters = ranges[i].split('-');
    var start = parameters[0];
    var end = parameters.length == 2 ? parameters[1] : start;
    dayCodes.push([dayNames.indexOf(start),  dayNames.indexOf(end)]);
}

var matchedDays = [];
for (var i = 0; i < dayCodes.length; i++) {
    if (dayCodes[i].length == 2) {
        matchedDays.push(dayNames.slice(dayCodes[i][0], dayCodes[i][1] + 1));
    }
  else {
      matchedDays.push(dayNames[dayCodes[i][0]]); 
  }
}

matchedDays = matchedDays.reduce((a,b) => a.concat(b));
console.log(matchedDays.join(', '));