Czy niektóre proszę wyjaśnić, dlaczego ta funkcja zwraca oryginalną wartość argumentu zamiast zmienionej wartości.

Edytuj: FYI Znam rozwiązanie problemu już nie rozumiem, co się dzieje "pod maską"; Co powoduje, że nie działa. Chcę lepiej zrozumieć języka

function helper(value){
  let hold = value;
    hold.replace(/[^\w]/g, '')
    hold.split('')
    hold.sort()
    hold.join('')
    hold.toLowerCase()

    return hold
}

console.log(helper('hello world')) <--- returns 'hello world'
0
mayo19 2 czerwiec 2018, 18:11

3 odpowiedzi

Najlepsza odpowiedź

Znalazłem rozwiązanie do "Dlaczego" kod działał tak, jak to było. Jest to dlatego, że macierze i przedmioty są uznawane, podczas gdy łańcuchy i liczby oraz inne prymitywy są niezmienne.

Aby uzyskać więcej informacji Przeczytaj ten blog Co są niezmiennymi i niezmiennymi strukturami danych?

A rozwiązanie zostało opublikowane tutaj przez "Nikhil Aggarwal"

0
mayo19 3 czerwiec 2018, 08:17

Musisz przypisać , funkcje nie zmieniają oryginalnej wartości i musi być ponownie przypisane. Możesz także użyć operatora kropki , aby połączyć wszystkie operacje i skrócić kod podobny

function helper(value){
    return value.replace(/[^\w]/g, '').split('').sort().join('').toLowerCase();
}

console.log(helper('hello world')) 

Alternatywnie możesz skorygować taki kod taki jak ten

function helper(value){
  let hold = value;
  hold = hold.replace(/[^\w]/g, ''); // re-assign
  hold = hold.split(''); // re-assign
  hold.sort(); // sort updates hold - re-assignment not required
  hold = hold.join(''); // re-assign
  hold = hold.toLowerCase(); // re-assign
  return hold;
}

console.log(helper('hello world'))
3
Nikhil Aggarwal 2 czerwiec 2018, 17:53

Wymień nie modyfikuje argumentu wejściowego, ale zamiast tego zwraca nowy ciąg.

1
PeteH 2 czerwiec 2018, 15:14