这个replaceAt功能如何工作?

时间:2017-07-17 15:56:01

标签: javascript

您能解释一下这段代码是如何工作的吗?

String.prototype.replaceAt = function(index, character) {
    return this.substr(0, index) + character + this.substr(index+character.length);
};


function titleCase(str) {
    var newTitle = str.split(' ');
    var updatedTitle = [];
    for (var st in newTitle) {
        updatedTitle[st] = newTitle[st].toLowerCase().replaceAt(0, newTitle[st].charAt(0).toUpperCase());
    }
    return updatedTitle.join(' ');
}

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

具体来说,究竟是什么传递给replaceAt(我得到它传递了一个索引,以及一个转换为小写的字符),但是替换它做了什么?

所以,在循环的第一次迭代中,它传递了replaceAt(0,i)对吗?然后替换它做什么?我只是不明白这一行:

this.substr(0, index) + character + this.substr(index+character.length)

我已经读过这个:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr。我在这里是因为我不理解返回声明以及它究竟在做什么。

4 个答案:

答案 0 :(得分:2)

假设您执行"thisisatest".replaceAt(3, "h")

则...

  1. this.substr(0, index)返回"thi":即"thisisatest"的前3个字符
  2. character返回"h"
  3. this.substr(index+character.length)返回"isatest":即"thisisatest"的所有字符,从第4位开始
  4. 所以,当你把它结合起来时,你会得到"thihisatest"

答案 1 :(得分:1)

让我们想象一下这个简单的案例:

"0123456789". replaceAt(2/*index*/,"000"/*character*/)

然后发生这种情况:

this.substr(0, index/*2*/)//"01"
 + character //"000"
 + this.substr(index/*2*/+character.length/*3*/)//"56789"

输出:

0100056789

答案 2 :(得分:0)

replaceAt函数只接受一个字符的索引(在这种情况下为0)并用另一个字符替换它(在这种情况下是原始字符的大写版本。这个特定的函数只是通过替换第一个字符来标记一个单词大写字母相同的字符。

您的提问行,在特定索引this.substr(0,index)处的字符之前获取单词的子字符串,因为substr不包含最后一个索引,附加指定的字符+ character,并附加字+ this.substr(index+character.length)

的其余部分的子字符串

示例'testing'.replaceAt(0,testing。charAt(0).toUpperCase()); =''+'T'+'esting'=测试;

答案 3 :(得分:0)

this.substr是一个对字符串进行操作并返回字符串的“子字符串”的函数。请参阅此处的教程:https://www.w3schools.com/jsref/jsref_substr.asp

所以replaceAt正在做的是对字符串进行操作并使用新的子字符串index替换目标索引character处的字符。实际上,传递的character不一定只有一个字符,但可以是多个,例如abcd。它名字很差。

更多细节,使用substr(),它将字符串的第一部分从索引0转移到index,添加传递给函数的'字符/字符串',以及然后从索引index+character.length开始接收其余的字符串。请注意,substr有一个可选参数,用于第一次调用(this.substr(0,index))。