Zamiana znaku w ciągu znaków

0

Witam,

Napisałem kod, który z zależnosci od wykrytego znaku powinien powinien go podmieniać, ale tego nie robi:

var pattern='1001';
var chunks=[];
var tmp="";
var num_of_chunks=3;

for (j=0;j<num_of_chunks;j++) {
  for (i=0;i<pattern.length;i++) {
    tmp += (Math.random() < 0.5 ? 0:1);
  }
  chunks.push(tmp);
  tmp="";
}

console.log(chunks);
if(chunks[0][1]=='1') {
  chunks[0][1].replace('1','7');
}
else {
  chunks[0][1].replace('0','4');
}
console.log(chunks);

Po wywyłaniu .replace() znak powinien być podmieniony, ale niestety nie jest.

0

W JavaScript .replace() nie podmienia "w miejscu".

Jeśli chcesz zmienić wartość jakiejś zmiennej powinieneś zrobić tak:

value = value.replace("from", "to");
0

Taka podmiana niestety też jest nieskuteczna (chunks[0][1]=chunks[0][1].replace('1','7');):

var pattern='1001';
var chunks=[];
var tmp="";
var num_of_chunks=3;

for (j=0;j<num_of_chunks;j++){
    for (i=0;i<pattern.length;i++){
        tmp+=(Math.random()<0.5?0:1);
    }
chunks.push(tmp);
tmp="";
}

console.log(chunks);
if(chunks[0][1]=='1'){
chunks[0][1]=chunks[0][1].replace('1','7');
}
else {
   chunks[0][1]= chunks[0][1].replace('0','4');
}
console.log(chunks);
0
mariusz198787 napisał(a):

Taka podmiana niestety też jest nieskuteczna (chunks[0][1]=chunks[0][1].replace('1','7');):

Czyli jak rozumiem, jeśli drugi znak w stringu to jest '1', to chcesz go podmienić na '7', a jeśli nie, to zakładając że drugim znakiem w stringu jest '0' to chcesz go podmienić na '4', tak?

No to musisz jeszcze pamietać, że .replace() podmienia tylko pierwsze występienie. Jeśli chcesz podmienić wszystkie, użyj .replaceAll().

3
mariusz198787 napisał(a):

Po wywyłaniu .replace() znak powinien być podmieniony, ale niestety nie jest.

W JavaScripcie stringów nie da się zmienić. Jak każdy prymityw, są one niezmienialne (immutable): https://developer.mozilla.org/en-US/docs/Glossary/Primitive

Dlatego replace nie zmieni ci stringa, tylko stworzy nowego z podmienionymi znakami.

Jak chcesz zmienić znak na jakiejś pozycji w stringu, to możesz użyć metody slice do skopiowania tego co jest przed oraz po danym znaku.

const s = 'korek';
const s2 = s.slice(0, 2) + 't' + s.slice(3); // 'ko' + 't' + 'ek'
console.log(s2); // kotek

Przy czym w innych językach programowania może działać to inaczej, są języki, gdzie możesz faktycznie zmieniać stringi w miejscu. JS tak nie działa.

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