Понимание этой программы, которая делает календарь? - PullRequest
0 голосов
/ 28 августа 2018

Я изучаю программу, которая делает календарь. При регистрации чисел в формате ГГГГ / ММ / ДД это должно произойти:

console.log(talkingCalendar("2004/11/01"));    =>  November 1st, 2004
console.log(talkingCalendar("2007/11/11"));    =>  November 11th, 2011
console.log(talkingCalendar("1987/08/24"));    =>  August 24th, 1987

Это то, что я изучаю:

function tensFn(day) {
  var output = 0;
  if (day.length > 1) {
    output = day[0];
  }

    return output;
  }

function getOrdinal(day) {
  var ones = day.toString().split('').pop();
   ones = parseInt(ones);
   var tens = parseInt(tensFn(day), 10);
   var ordinate = '';
   if (tens == 0  || tens == 2) {
     switch (ones) {
     case 1:
       ordinate = 'st';
       break;
     case 2:
       ordinate = 'nd';
       break;
     case 3:
       ordinate = 'rd';
       break;
     case 4: case 5: case 6: case 7: case 8: case 9:
      ordinate = 'th';
      break;
  }

  }


  if (tens == 1) {
    switch (ones) {
    case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:
     ordinate = 'th';
  }

  }

  return ordinate;
}

Это та часть, которую я не до конца понимаю:

function getOrdinal(day) {
  var ones = day.toString().split('').pop();
   ones = parseInt(ones);
   var tens = parseInt(tensFn(day), 10);
   var ordinate = '';

Что автор делает с переменными, зачем преобразовывать его в строку, разбивать, а затем извлекать перед анализом?

1 Ответ

0 голосов
/ 28 августа 2018

Из того, что я вижу, оно используется для разделения дней. Пример № 27 делится на 20 и 7.

 function getOrdinal(day) {                         Example day = 27
    var ones = day.toString().split('').pop();      convert 27 to '27', split on chars ['2','7'] and pop '7'
    ones = parseInt(ones);                          convert to integer the result from above 7 
    var tens = parseInt(tensFn(day), 10);           get the first number when days length is greater than 1. In this case returns 2 
}

На мой взгляд, лучший подход для этого был бы:

function getOrdinal(day){           Example day = 27
    var ones = day % 10             get 27 mod 10 = 7
    var tens = day / 10 |0          get difference of days / ten, then floor it. Result is 2
    var ordinate = '';
    ...

function getOrdinal(day){		    
	var ones = day % 10			     
	var tens = day / 10 |0	
	return [ones, tens]
}

console.log(getOrdinal(27))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...