Endre formatet på noen strenger

stemmer
1

Jeg har strenger i dette formatet:

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

Jeg ønsker å få:

20180816
20180117
20171107
20130102

Hvordan kan jeg gjøre det?

Det er året, måneden (i to siffer) og dagen (i to siffer).

For året er det enkelt: bare ta de siste fire tegnene i strengen, men for dagen og måneden?

Dette er koden jeg skaper:

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));
Publisert på 19/09/2018 klokken 13:35
kilden bruker
På andre språk...                            


3 svar

stemmer
1

Det er mulig å fjerne noen av treng slicing hvis du bruker RegExpfunksjonen execsom kan returnere kamp grupper fra en spørring selv om det første elementet vil være 'hele kampen'.

Når man har en rekke dato stykker, reduserer det tilbake til en streng i omvendt rekkefølge oppnås via reduceRightmatrisefunksjon.

Vær oppmerksom på at padStart er en streng funksjon slik at du må konvertere tallene til strenger først. Dette oppnås ved å sette sammen dem med en tom streng altså ('' + <number>).padStart(...), og jeg gjøre bruk av braketter for å sikre korrekt utførelse rekkefølgen av uttalelsen

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

Svarte 19/09/2018 kl. 18:02
kilden bruker

stemmer
1

For å oppnå forventet resultat, bruker under valget om å finne måned verdi fra måneden navn rekke

  1. Bruk måneder Array å finne den måneden verdi og formatere den for å legge til '0', hvis det er mindre enn 10
  2. Bruke split (' ') metode med plass, kan dato delt inn dato, måned, år
  3. Format måned for å legge til '0', hvis det er mindre enn 10

codepen for referanse - 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));

Svarte 19/09/2018 kl. 14:50
kilden bruker

stemmer
0

Du kan bruke padStart å legge 0 lettere.

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

Svarte 19/09/2018 kl. 16:59
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more