javascript - javascript中字符串字符迭代器的效率

标签 javascript

我的任务是编写一个字符串比较函数,结果如下:

"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/

相关文章:

javascript - 打印或导出Cesium图加载部门

javascript - 我如何在 JS 中单独插入一个 URL 到所有数组元素

javascript - 如果单击按钮,将选中哪个下拉项和复选框?

javascript - HighCharts + reveal.js 图表大小

javascript - 我怎样才能用Javascript一步步保存我的进度? (在浏览器中)

javascript - jQuery dataTable 不对新数据进行排序

javascript - 可选的链接运算符开 Jest 测试

javascript - 身份验证 - 每个 ajax 中的 key

javascript - Bower - EPERM,取消链接错误

javascript - Chrome Javascript 控制台中带有空格的奇怪字符串行为