Nie działa jak powinno - nie dostawia 0

0

Cześć,
Zawiesiłam się na takim oto fragmencie służącym do zmiany sposobu wyświetlania daty (ściślej, do przetworzenia daty na ciąg do łatwego porównywania)

W tym kodzie działa wszystko z wyjątkiem linijki

/for (x of Birth){if (x.length==1){x= '0'+x}};

aktualnie wykomentowanej. Co jest z nią nie tak? Idea jest taka, że jeżeli trafi na ciąg o długości 1 to dostawi z przodu 0, tymczasem nie dostawia.

  let text = '1.10.1999 12:15'

      const sli = (txt, pattern, end=null)=>{let a=null; if (end===null) {a= txt.slice(0, txt.indexOf(pattern));} 
      else{a=txt.slice(txt.indexOf(pattern)+1);}return a; } ;
      
       let text = '1.10.1999 12:15'
const reshapeBirthData =(tekst)=>{

  let begin=sli(tekst,' ');
  begin= begin.split('.');
  begin.reverse();

  let end=sli(tekst,' ',-3);
  console.log(end);
  end=end.split(':');
  let Birth = (begin.concat(end));
//for (x of Birth){if (x.length==1){x= '0'+x}};
Birth = Birth.join();
Birth= Birth.replace(/,/g,'');
  return Birth;
  };
0

Zapomniałaś o let w pętli:

  for (let x in birth) {
    if (x.length === 1) {
      x = '0' + x;
    }
  };
0

W pętli for-of modyfikujesz zmienną, który wskazuje na kolejne elementy tablicy. Po operacji x= '0'+x zmienna x wskazuje na string, który jest wynikiem konkatenacji, ale element tablicy zostaje niezmieniony. Jeśli chcesz zmodyfikować wartość elementu tablicy, to użyj identyfikatora Birth z indeksem. Możesz to zrobić np. w pętli for:

for (var i = 0; i < Birth.length; i++) {
    if (Birth[i].length === 1) {
        Birth[i] = "0" + Birth[i];
    }
}
0

@Burmistrz

Dzięki, oto skutki pogoni za zwięzłą składnią :(
Dziękuję też Shangri, w tej wersji faktycznie opuściłam let, ale przepisywałam to kilka razy od początku i to tak

1 użytkowników online, w tym zalogowanych: 0, gości: 1