我有这个函数用indexOf(之前)替换一个名为“after”的字符串的数组元素。这几乎可以正常工作,除了我得到两个“后”值而不是一个
这是我的代码:
function myReplace(str, before, after) {
var strArr = [];
strArr = str.split(' ');
for (var i = 0; i < strArr.length; i++) {
strArr.splice(strArr.indexOf(before), 1, after);
}
return strArr;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
以及它返回的内容:
[“A”,“quick”,“brown”,“fox”,“leaped”,“over”,“the”,“lazy”,“leaped”]
出了什么问题?
答案 0 :(得分:2)
啊这里的问题相当不吉利!这是因为在找到元素4之后,indexOf返回-1(表示未找到的方式),并从数组中替换最后一个(-1)。
function myReplace(str, before, after) {
var strArr = [];
strArr = str.split(' ');
for (var i = 0; i < strArr.length; i++) {
var index = strArr.indexOf(before);
if(index!=-1){
strArr.splice(index, 1, after);
}
}
return strArr;
}
希望这有帮助。
答案 1 :(得分:1)
如果您只想更换,请保持简单
var regex = new RegExp("jumped", "gi");
var output = "A quick brown fox jumped over the lazy dog".replace( regex, "leaped" );
console.log(output);
您可以阅读有关RegExp
here
答案 2 :(得分:1)
当没有找到元素时,Array.prototype.splice返回-1:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
所以在第一个循环中,它将取代&#34;跳跃&#34;通过&#34;跳跃&#34;正如所料,但对于所有其他,它将strArr(-1, 1, after)
,这意味着它将用after
替换最后一个元素。
这里的问题是你的for循环,它会检查表中的每个元素之前是否存在。您必须使用上面链接中提供的示例中的while循环(查看查找元素的所有匹配项)
答案 3 :(得分:0)
使用此:
function myReplace(str, before, after) {
var strArr = [];
strArr = str.split(' ');
for (var i = 0; i < strArr.length; i++) {
if(strArr[i] === before){
strArr[i] = after;
}
}
return strArr;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");