консоль говорит, что не может прочитать свойство charCodeAt - PullRequest
0 голосов
/ 20 сентября 2019
<script> 
var str=prompt('enter');
var a= str.split('');
for (j=0; j<str.length; j++){
for(i=j; i<str.length; i++)
{
  if(a[i].charCodeAt(0) > a[i+1].charCodeAt(0))
    {
      var b= a[i];
      a[i]=a[i+1];
      a[i+1]=b;
    }
}
}

     str=a.join('');
    document.write(str);

</script>

Я знаю, что метод сортировки более эффективен, но может кто-нибудь сказать, пожалуйста, что здесь не так.Я хочу отсортировать строку, но она показывает, что не может прочитать свойство charCodeAt.Спасибо;

1 Ответ

0 голосов
/ 20 сентября 2019

У вас проблема за гранью.Это происходит, когда вы пытаетесь сравнить charCodeAt первого символа со вторым, когда второй не существует (например, в конце массива у вас больше нет символов для сравнения).

Как мы обсуждали вкомментарии, вам нужно просто отсортировать вашу строку по буквам charCodeAt, чтобы вы могли использовать этот код для сортировки вашей строки:

function bubbleSort(ar) {
  for (var i = (ar.length - 1); i >= 0; i--) {
    for (var j = 1; j <= i; j++) {
      if (ar[j-1] > ar[j]) {
        var temp = ar[j-1];
        ar[j-1] = ar[j];
        ar[j] = temp;
      }
    }
  }
  return ar;
}

function sortString(input) {
  return bubbleSort(
    input
      .split('')
      .map(function(char) {
        return char.charCodeAt(0)
      })
  ).map(function(charCode) {
    return String.fromCharCode(charCode);
  }).join('');
}

console.log(sortString('abcabcabc')); // => "aaabbbccc"
console.log(sortString('вбавбавба')); // => "ааабббввв"

Ссылка: https://www.cs.cmu.edu/~adamchik/15-121/lectures/Sorting%20Algorithms/sorting.html

...