亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在混合字符串和數字javascript中獲得兩次并比較它們

如何在混合字符串和數字javascript中獲得兩次并比較它們

莫回無 2023-05-18 11:10:56
我得到以下格式的時間我應該如何比較這兩個并找到更大的一個?我的目標是對它們進行排序:function (a, b) {  //here is should find a way to extract a and b to find the right number to compare  a = '16 days, 23 hours, 39 minutes';  b = '39 minutes';  return ((a < b) ? -1 : ((a > b) ? 1 : 0));}
查看完整描述

3 回答

?
FFIVE

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'))


查看完整回答
反對 回復 2023-05-18
?
jeck貓

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);


查看完整回答
反對 回復 2023-05-18
?
桃花長相依

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);

注意:如果輸入是由用戶生成的,您可能希望包括更多的生產檢查。祝你好運。



查看完整回答
反對 回復 2023-05-18
  • 3 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號