#javascript
#javascript
Вопрос:
У меня есть массив, который всегда будет содержать дни недели в качестве входных данных. У меня есть постоянный массив упорядоченных дней недели для сравнения. Сначала я сортирую входной массив, сравнивая индекс массива с массивом 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) amp; (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;
};
Ответ №1:
Попробуйте следующий код:
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);
И все будет работать
Ответ №2:
После нескольких попыток еще несколько часов я заставил его работать, но он не кажется СУХИМ:
const days = [
'sun',
'mon',
'tue',
'wed',
'thu',
'fri',
'sat',
];
export const combineDays = (inputDays) => {
const sortedArray = inputDays
.map((day) => {
return days.indexOf(day);
})
.sort((a, b) => {
return a - b;
});
let dayRange = '';
let range = false;
let rangeEnd = '';
let rangePos = 0;
sortedArray.forEach((day, index) => {
if (dayRange === '') {
dayRange = days[day];
rangePos = day 1;
} else if (day === rangePos) {
if (rangeEnd !== '') {
range = true;
} else {
range = false;
}
if (index !== sortedArray.length - 1) {
rangeEnd = days[day];
rangePos ;
} else {
if (range === true) {
dayRange = dayRange ' to ' days[day];
} else if (rangeEnd !== '') {
dayRange = dayRange ', ' rangeEnd ', ' days[day];
} else {
dayRange = dayRange ', ' days[day];
}
}
} else if (day !== rangePos) {
if (range === true) {
dayRange = dayRange ' to ' rangeEnd;
} else {
dayRange = dayRange ', ' rangeEnd;
}
dayRange = dayRange ', ' days[day];
rangePos = day 1;
rangeEnd = '';
}
});
return dayRange;
};