控制台说无法读取 charCodeAt 属性

console says cant read charCodeAt property

<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 属性。谢谢;

您遇到越界问题。当您尝试将第一个字符的 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