如何解决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'));
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;
这是一个小技巧。调试是编码的好工具。试试吧!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。