JS不断报告“ toString”方法未定义

问题描述

我的目标是按字母顺序排列吉文字符串。例如,给定字符串“ The Holy Bible”,应得到“ BbeehHilloTy”。下面是代码

function alphabetized(s) {
  let sArray = s.split(" ").join("").split("");
  //below to perform a bubble sorting
  for (let i = 0; i < sArray.length; i++) {
    for (let j = 0; j < sArray.length - i; j++) {
      if ((sArray[j].toString().toLowerCase()) > (sArray[j + 1].toString().toLowerCase())) {
        let tempItem = sArray[j];
        sArray[j] = sArray[j + 1];
        sArray[j + 1] = tempItem;
      }
    }
  }
  return sArray.join("");
}

console.log(alphabetized('The Holy Bible'));

我一直从JS控制台获取错误

if ((sArray[j].toString().toLowerCase()) > (sArray[j + 1].toString().toLowerCase())) {
TypeError: Cannot read property 'toString' of undefined

任何帮助将不胜感激!

解决方法

问题不是toString未定义。这是因为您试图在未定义 的内容上调用toString()

由于您要对数组的求值结果调用toString(),因此您所引用的数组的元素似乎无效。您可以在两个地方执行此操作:sArray[j]sArray[j+1 ]。由于您要在0到数组的长度之间循环j,因此您可以求值比数组的长度大一。

作为调试的一部分,请尝试记录j的值以及您认为要评估的字符的值。

,

这是问题所在。 未定义变量,则无法调用toString方法。 所以您只需要添加此代码。如果你不想做任何事情

if(!sArray[j + 1]) continue;

这是一个小技巧。调试是编码的好工具。试试吧!