Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我无法理解这个涉及简单for循环的基本算法?_Javascript_Arrays_String_Algorithm_For Loop - Fatal编程技术网

Javascript 我无法理解这个涉及简单for循环的基本算法?

Javascript 我无法理解这个涉及简单for循环的基本算法?,javascript,arrays,string,algorithm,for-loop,Javascript,Arrays,String,Algorithm,For Loop,考虑一个字符串,它的第一个字母总是“M”,其他字符几乎可以是“I”s和“U”s的任意组合(不允许使用其他字母,只允许是和我们)。例如:MIU,MUI,MIUIU,muiiuu,muiiuiii,miuiuui都是这类字符串 我想要一个函数,该函数给定任何这样的字符串作为输入,返回一个数组,其中包含所有可能的方式,如果模式“III”出现在输入字符串中,则可以在输入字符串中替换为“U”。例如,在“MIIII”中有两种方法可以用“U”替换“III”,即MUI和MIU。因此,函数应在给定MIIII作为输

考虑一个字符串,它的第一个字母总是
“M”
,其他字符几乎可以是
“I”s
“U”s
的任意组合(不允许使用其他字母,只允许
我们
)。例如:
MIU
MUI
MIUIU
muiiuu
muiiuiii
miuiuui
都是这类字符串

我想要一个函数,该函数给定任何这样的字符串作为输入,返回一个数组,其中包含所有可能的方式,如果模式
“III”
出现在输入字符串中,则可以在输入字符串中替换为
“U”
。例如,在
“MIIII”
中有两种方法可以用
“U”
替换
“III”
,即
MUI
MIU
。因此,函数应在给定
MIIII
作为输入时返回
[MUI,MIU]

这是我的(有缺陷的)功能。其背后的思想是在输入字符串中循环(即
MIstring
),寻找
“III”
。每次发现
“III”
时,都会将
雾化
添加到
IIIoptions
数组中,但将
“U”
替换为
“III”

函数规则三(){
变量IIIoptions=[];
对于(变量i=0;i
给定输入
MIIII
,我希望函数返回
[MUI,MIU]
。但是,它返回
[MUI,MUI]
。我尝试了不同的输入,它显示了相同的问题,即数组中的所有项都是相同的。例如,给定字符串
miiiiiu
它给我
[muiuiiu,muiuiiu,muiuiiu,muiiiiu]
而不是
[muiuiiu,miuuiiu,miiiiiu]
。因此,该函数获取MIstring right中包含的
“III”s
的数量,但它不会返回我期望它返回的数组


我的函数有什么问题?

主要问题是您正在使用,并且该方法始终会用您调用它的方式将
III
的第一个匹配序列替换为
U
。当找到匹配项时,您可以使用生成带有替换项的新字符串,如下所示:

const input=“miiii”;
功能规则三(str)
{
变量IIIoptions=[];
对于(变量i=0;i
.as控制台{背景色:黑色!重要;颜色:石灰;}

.作为控制台包装{最大高度:100%!重要;顶部:0;}
这是因为您的
.replace
始终替换第一个
III
——无论实际位置如何。您需要的是
结果。按(位置前的切片+位置后的U+切片)
而不是
replace
。或者,如果您不需要使用
for()
循环,请使用
reduce()
并避免代码的副作用。谢谢大家的回答!
function ruleThree() {
    var IIIoptions = [];
    for (var i = 0; i < MIstring.length; i++) {
        if (MIstring.slice(i, i+3) === "III") {          
           IIIoptions.push(MIstring.replace(MIstring.slice(i, i+3), "U"));
        }
    }
    return IIIoptions;
}