我的任务是编写一个字符串比较函数,结果如下:
"ABC" & "abc" returns 0;
"abc" & "abcd" return -1;
"abcd" & "abc" returns 1;
我的解决方案是:
function strcmp(a,b){
var aTemp = a.toLowerCase();
var bTemp = b.toLowerCase();
if(aTemp === bTemp){
return 0;
} else {
for(var i = 0; i < aTemp.length;i++){
var charAtA = aTemp.charCodeAt(i), charAtB = bTemp.charCodeAt(i);
if(charAtB !== charAtB) // NaN returns false when compared to itself.
return 1;
if(charAtA < charAtB)
return -1;
else if(charAtA > charAtB)
return 1;
}
if(bTemp.length > aTemp.length)
return -1;
return 0;
}
}
在展示我的解决方案时(除了在代码中发现错误之外),有人问我为什么将字符串转换为小写并将它们存储在参数中,而不是在 for 循环的每次迭代中将字符转换为小写。 所以我的问题是,将字符串转换为小写的正确方法是什么,什么更有效,或者我提交答案的人只是和我玩心理游戏?
最佳答案
将整个字符串转换为小写意味着您必须循环所有字符,即使比较将在第一个字符差异处停止。因此,如果您在获取每个字符时对其进行转换,则只需执行获得结果所需的转换次数即可。除非两个字符串相等,否则您将始终以这种方式进行更少的转换;当它们相等时,您会进行相同数量的转化。
关于javascript - javascript中字符串字符迭代器的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965442/