javascript - 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;
};
解决方案
试试下面的代码:
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);
一切都会好起来的
推荐阅读
- python - 安装一个软件包后,Conda 崩溃 - OSError: /lib64/liblzma.so.5: version `XZ_5.2' not found
- vb.net - 带有 VB 控件的复选框“已检查”功能
- javascript - Node.js:为什么我的预期值没有在“try-catch”子句的“catch”块中返回?
- excel - 如何使用 vba 从 visio 到 excel 工作簿进行 SQL 查询?
- c++ - C++ 将方法和字段带入外部范围,无需显式引用
- reactjs - 反应构建只能显示开始页面,但不能显示项目中的其他页面
- mysql - mysql查询间歇性地返回空结果
- java - LinkageError 与 org.jboss.logging
- google-data-studio - 是否可以在 Google Data Studio 中的报告之间共享过滤器?
- r - 循环在 R 中完成时间太长