Рассмотрим строку, первая буква которой всегда "M"
, а другими символами могут быть любые комбинации "I"s
и "U"s
(никакие другие буквы не допускаются, только Is
и Us
). Например: MIU
, MUI
, MIUIU
, MUIIUIU
, MUIIIUIIIUIII
, MIUUIUIIIUUI
- все строки этого типа.
Я хочу, чтобы функция, которая давала любую такую строку в качестве входных данных, возвращала массив всеми возможными способами, которыми шаблон "III"
может, если он вообще присутствует во входной строке, быть заменен на "U"
во входных данных. Например, есть 2 способа, которыми "III"
можно заменить на "U"
в "MIIII"
, а именно MUI
и MIU
. Следовательно, функция, учитывая MIIII
в качестве входных данных, должна возвращать [MUI, MIU]
.
Это моя (некорректная) функция. Идея, лежащая в основе этого, заключается в том, чтобы циклически проходить по входной строке (т.е. MIstring
), ища "III"
. Каждый раз, когда "III"
найден, MIstring
добавляется в массив IIIoptions
, но "U"
заменяет "III"
.
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;
}
Учитывая ввод MIIII
, я ожидал, что функция вернет [MUI, MIU]
. Тем не менее, он возвращает [MUI, MUI]
. Я пробовал с разными входами, и он отображает ту же проблему, то есть все элементы в массиве одинаковы. Например, учитывая строку MIIIIUIIIIU
, она дает мне [MUIUIIIIU, MUIUIIIIU, MUIUIIIIU, MUIUIIIIU]
вместо [MUIUIIIIU, MIUUIIIIU, MIIIIUUIU, MIIIIUIUU]
. Таким образом, функция получает правильное число "III"s
, содержащееся в MIstring, но не возвращает массив, который я ожидаю вернуть.
Что не так с моей функцией?