3 回答

TA貢獻1797條經驗 獲得超6個贊
使用正則表達式,我們可以先提取總時間并在方法中以分鐘為單位進行轉換getTimeInMinutes,然后相應地進行比較。像這樣:
function(a, b) {
function getTimeInMinutes(timestamp) {
const regex = /(?:(\d*?) days, )?(?:(\d*?) hours, )?(?:(\d*?) minutes)?/;
let [, days = 0, hours = 0, minutes = 0] = regex.exec(timestamp);
days = parseInt(days, 10);
hours = parseInt(hours, 10);
minutes = parseInt(minutes, 10);
const totalMinutes = (days * 24 * 60) + (hours * 60) + minutes;
return totalMinutes;
}
const totalMinutesInA = getTimeInMinutes(a);
const totalMinutesInB = getTimeInMinutes(b);
return totalMinutesInA - totalMinutesInB;
}
function compare(a, b) {
function getTimeInMinutes(timestamp) {
const regex = /(?:(\d*?) days, )?(?:(\d*?) hours, )?(?:(\d*?) minutes)?/;
let [, days = 0, hours = 0, minutes = 0] = regex.exec(timestamp);
days = parseInt(days, 10);
hours = parseInt(hours, 10);
minutes = parseInt(minutes, 10);
const totalMinutes = (days * 24 * 60) + (hours * 60) + minutes;
return totalMinutes;
}
const totalMinutesInA = getTimeInMinutes(a);
const totalMinutesInB = getTimeInMinutes(b);
console.log({totalMinutesInA, totalMinutesInB})
return totalMinutesInA - totalMinutesInB;
}
console.log('Test 1', compare('4 minutes', '3 minutes'));
console.log('Test 2', compare('24 minutes', '1 hours, 3 minutes'));
console.log('Test 2', compare('2 days, 24 minutes', '2 days, 24 minutes'))

TA貢獻1909條經驗 獲得超7個贊
另一個相當冗長的選項是這樣的: https ://jsfiddle.net/0k9asxeb/
var a = '16 days, 23 hours, 39 minutes';
var b = '39 minutes';
const getDayMinutes = (string) => {
if (!string.includes(' days')) {
return 0;
}
const days = string.split(' days')[0];
console.log(days);
return days * 24 * 60;
}
const getHoursMinutes = (string) => {
if (!string.includes (' hours')) {
return 0;
}
const hoursDirty = string.split(' hours')[0];
console.log(hoursDirty);
if (!hoursDirty.includes(',')) {
return hoursDirty;
}
const hours = hoursDirty.slice(hoursDirty.lastIndexOf(',') + 2, hoursDirty.length);
console.log(hours);
return hours * 60;
}
const getMinutes = (string) => {
if (!string.includes(' minutes')) {
return 0;
}
const minutesDirty = string.split(' minutes')[0];
console.log(minutesDirty);
if (!minutesDirty.includes(',')) {
return minutesDirty;
}
const minutes = minutesDirty.slice(minutesDirty.lastIndexOf(',') + 2, minutesDirty.length);
console.log(minutes);
return minutes;
}
const getTotalMinutesInString = (string) => {
const dayMinutes = getDayMinutes(string);
console.log('dayMinutes', dayMinutes);
const hoursMinutes = getHoursMinutes(string);
console.log('hoursMinutes', hoursMinutes);
const minutes = getMinutes(string);
console.log('minutes', minutes);
return parseInt(dayMinutes + hoursMinutes + minutes);
}
const totalMinutes = getTotalMinutesInString(b);
console.log(totalMinutes);

TA貢獻1860條經驗 獲得超8個贊
創建一個將字符串轉換為秒的函數。這是一個例子:
const toTimeConvertor = (timeEntry) => {
const string = timeEntry.replace(',', '');
switch(string) {
case 'day':
case 'days':
return 60 * 60 * 24;
case 'hour':
case 'hours':
return 60 * 60;
case 'minute':
case 'minutes':
return 60;
case 'second':
case 'seconds':
return 1;
default:
return 0;
}
};
const stringToSeconds = (timeString) => {
return [...timeString.split(',')].reduce((seconds, entry) => {
const values = entry.trim().split(' ');
const timeNumberString = values[0];
const timeConvertorString = values[1];
const timeNumber = Number.parseInt(timeNumberString);
const timeConvertor = toTimeConvertor(timeConvertorString)
const time = timeNumber * timeConvertor;
return seconds + time;
}, 0);
};
const myFilter = (a, b) => stringToSeconds(a) - stringToSeconds(b);
//Demo Output
const list = [
'16 days, 23 hours, 39 minutes',
'39 minutes',
'5 days, 36 minutes'
];
const sortedList = list.sort(myFilter);
console.log(list);
注意:如果輸入是由用戶生成的,您可能希望包括更多的生產檢查。祝你好運。
添加回答
舉報