我在理解代码时遇到了严重的问题。
function replace(str, before, after) {
var rtt = before;
var rt;
if(before[0] === before[0].toUpperCase()) {
var aa = after.split("");
var u = after[0].toUpperCase();
aa.splice(0,1,u);
rt = aa.join("");
}
else {
rt = after;
}
var r = str.split(" ");
var i = r.indexOf(rtt);
r.splice(i,1, rt);
var join = r.join(" ");
return join;
}
replace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
我不明白为什么我在r.join(" ")
之后只能r.splice(i,1,rt)
然后返回r
? 为什么我必须声明新的变量连接?否则返回将不会返回正确的语句。但代码是正确的。
答案 0 :(得分:2)
根据MDN,
splice()方法通过删除来更改数组的内容 现有元素和/或添加新元素。
此方法返回什么内容?
包含已删除元素的数组。如果只有一个元素 删除后,返回一个元素的数组。如果没有元素 删除后,返回一个空数组。
就这个问题而言
为什么我必须声明新变量加入?
实际上,您不必申报新变量。您只需返回此值
即可return r.join(" ");
function replace(str, before, after) {
var rtt = before;
var rt;
if(before[0] === before[0].toUpperCase()) {
var aa = after.split("");
var u = after[0].toUpperCase();
aa.splice(0,1,u);
rt = aa.join("");
}
else {
rt = after;
}
var r = str.split(" ");
var i = r.indexOf(rtt);
r.splice(i,1, rt);
return r.join(" ");
}
var replaced = replace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
document.write(replaced);

答案 1 :(得分:1)
请注意,splice()
方法会更改原始数组。
splice()
方法在数组中添加/删除项目,返回已删除的项目。
现在,如果在代码的适当时候仍然需要该数组,则可以继续使用旧变量而不是新的var
。