javascript - 意外的 string.replace() 结果

标签 javascript

为什么会失败?我应该(以某种方式)转义字母 i — 这不会因其他字符而失败。

titleCase("I'm a little tea pot");

// Prints:   "i'm A Little Tea Pot"
// Expected: "I'm A Little Tea Pot"

function titleCase(str) {
  return str.split(' ').map(function(each) {
    return each.toLowerCase().replace(each[0], each[0].toUpperCase());
  }).join(' ');
}

最佳答案

.toLowerCase() 发生在 each 的原始值上,所以 .replace() 可能/不会给你预期的结果。

如果将其拆分为单独的语句,它应该会按预期工作:

function titleCase(str) {
    return str.split(' ').map(function(each) {
        each = each.toLowerCase();
        return each.replace(each[0], each[0].toUpperCase());
    }).join(' ');
}

作为一种稍微更有效的方法,最好将 .toLowerCase() 移动到 .map() 调用之前,这样它只需要调用一次,而不是每个单词调用一次:

function titleCase(str) {
    str = str.toLowerCase();
    return str.split(' ').map(function(each) {
        return each.replace(each[0], each[0].toUpperCase());
    }).join(' ');
}

关于javascript - 意外的 string.replace() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39832068/

相关文章:

javascript - 使用具有动态字段名称的 ng-messages

javascript - JSon HTML 表格

javascript - Angular2网格错误

javascript - 当鼠标悬停在 div 上时获取该 div 的信息

javascript - 如何从 Javascript 获取 optgroup 值?

javascript - 如何从 JS 文件中导出所有函数?

javascript - 我的时钟区域刷新不佳

javascript - 如何在 JavaScript 中添加/附加到现有的 Web 存储?

javascript - 发现输入中的 # 或 @

javascript - 与背景图片一起定位时链接不起作用?