首页 > 解决方案 > JS:结合一周中连续三天或更多天

问题描述

我有一个数组,它总是包含一周中的几天作为输入。我有一个 const 数组,其中包含一周中的有序天数进行比较。我首先通过将数组的索引与 const 数组进行比较来对输入数组进行排序。

现在,我可以遍历输入数组以查找两个值之间的索引并确定它们是否连续。在这一点之后,我迷失了如何创建我想要的输出。

例如,我有输入数组:

[sun, mon, tue, thu, fri]

我想输出为:

sun to tues, thu, fri

编辑

抱歉,最初发布时我没有发布我的尝试。请看下面:

const days = [
  'sun',
  'mon',
  'tues',
  'wed',
  'thurs',
  'fri',
  'sat',
];

export const combineDays = (inputDays) => {
  const sortedArray = inputDays
    .map((day) => {
      return days.indexOf(day);
    })
    .sort((a, b) => {
      return a - b;
    });

// the string I want to return
  let dayRange = '';
//variable to hold previous day if consecutive
  let rangeEnd = '';
//range position in the loop
  let rangePos = 0;
  sortedArray.forEach((day) => {
    if (dayRange === '') {
      dayRange = days[day];
      rangePos = days.indexOf(days[day]) + 1;
    } else if (days.indexOf(days[day]) === rangePos) {
      rangeEnd = days[day];
      rangePos++;
    } else if ((days.indexOf(days[day]) !== rangePos) & (rangeEnd !== '')) {
      dayRange = dayRange + ' to ' + rangeEnd + ', ' + days[day];
      rangePos = days.indexOf(days[day]) + 1;
      rangeEnd = '';
    } else {
      dayRange = dayRange + ', ' + days[day];
      rangeEnd = '';
      rangePos = days.indexOf(days[day]) + 1;
    }
  });
  return dayRange;
};

标签: javascript

解决方案


试试下面的代码:

const array = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];

const inputArray = ['fri','thu', 'sat'];

let indexArray = inputArray.map(item => {
 return array.indexOf(item);
});

let outputArray = indexArray.sort(function(a, b){return a-b}).map(item => 
 array[item]);

// EXPECTED RESULT: ["thu","fri","sat"]
 console.log(outputArray);

一切都会好起来的


推荐阅读