Изменить формат некоторых строк - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть строки в этом формате:

Puntata del 16 Agosto 2018
Puntata del 17 Gennaio 2018
Puntata del 7 Novembre 2017
Puntata del 2 Gennaio 2013

Я хотел бы получить:

20180816
20180117
20171107
20130102

Как я могу это сделать?

Это год, месяц (из двух цифр) и день (из двух цифр).

Для года это просто: достаточно взять последние четыре символа строки, но для дня и месяца?

Это код, который я создаю:

var newName = function(oldName) {
    var oldNameWithoutPuntata = oldName.substring(12);
    console.log('oldNameWithoutPuntata:', oldNameWithoutPuntata);

    var year = oldNameWithoutPuntata.substr(oldNameWithoutPuntata.length - 4);
    console.log('year:', year);

    // ...
    return year + month + day;
}

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать padStart для более простого добавления 0.

См. https://codepen.io/anon/pen/bxOvmy?editors=1011

var newName = function(oldName) {
    var parseDate = oldName.split(' ');
    var monthsList = ['Gennaio','Febbraio','Marzo', 'Aprile','Maggio','Giugno', 'Luglio', 'Agosto','Settembre', 'Ottobre', 'Novembre','Dicembre'];

    var month = monthsList.indexOf(parseDate[3]) + 1;
    month = month.toString().padStart(2, "0");
    var year = parseDate[4];
    var date = parseDate[2].padStart(2, "0");
 
    return year + month + date;
}

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));
0 голосов
/ 19 сентября 2018

Можно удалить часть среза подстроки, если вы используете функцию RegExp exec, которая может возвращать группы совпадений из запроса, хотя первым элементом будет «полное совпадение».

Если у вас есть массив кусочков даты, его уменьшение до строки в обратном порядке достигается с помощью функции массива reduceRight.

Обратите внимание, что padStart является функцией String, поэтому вам нужно преобразовать числав первую очередьЭто достигается путем объединения их с пустой строкой, т.е. ('' + <number>).padStart(...), и я использую скобки для обеспечения правильного порядка выполнения оператора

let getMonthAsNumber = month => ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'].indexOf(month)+1

var newName = oldName => /^Puntata del ([0-9]+)\s([^0-9\s]+)\s([0-9]+)$/gi.exec(oldName)
  // remove the first element of the match array - this is the whole match
  .slice(1)
  // use reduceRight to work along the rest of the match groups 'backwards'
  // apend the strings together and convert/pad as required
  .reduceRight((prev, cur) => prev + (''+(isNaN(cur)? // is 'cur' a string?
  getMonthAsNumber(cur) // yes - convert month to number
  : 
  cur // no - return number
  ))
  .padStart(2, '0'), '')

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));
0 голосов
/ 19 сентября 2018

Для достижения ожидаемого результата используйте указанную ниже опцию поиска значения месяца из массива названий месяцев

  1. Используйте Месяц Массив, чтобы найти значение месяца и отформатировать его, добавив «0», если оно меньше10
  2. Используя метод split ('') с пробелом, дату можно разбить на дату, месяц, год
  3. Отформатируйте месяц, чтобы добавить '0', если он меньше 10

код для справки - https://codepen.io/nagasai/pen/QVzqPZ?editors=1011

var newName = function(oldName) {
  var oldNameWithoutPuntata = oldName.substring(12);
  
  var months = ['Gennaio','Febbraio','Marzo', 'Aprile','Maggio','Giugno', 'Luglio', 'Agosto','Settembre', 'Ottobre', 'Novembre','Dicembre']
  
  var dateArr = oldNameWithoutPuntata.split(' ')
  
  var month = months.indexOf(dateArr[1]) + 1 
  month = month< 10 ? ('0' + month) : month
  var year = dateArr[2];
  var date = dateArr[0]
  date = date< 10 ? ('0' + date) : date
 
  return year + month + date;
}

var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...