Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   избавление от мутабельной переменной (https://javascript.ru/forum/misc/82557-izbavlenie-ot-mutabelnojj-peremennojj.html)

ekaterina22 24.05.2021 18:15

избавление от мутабельной переменной
 
Стала изучать иммутабельность переменных. В задаче нужно избавится от мутабельной переменной и вместо цикла использовать map. Не получается это реализовать.
пример: command = "(al)G(al)()()G"
G -> G
() -> o
(al) -> al
результат: "alGalooG"

let interpret = function (command) {
    let string = '';
    for (let i = 0; i < command.length; i++)
        if (command[i] === '(' && command[i + 1] === ')') {
            string += 'o'
        } else if (command[i] !== '(' && command[i] !== ')') {
            string += command[i]
        }

    return string
};

ksa 24.05.2021 19:12

Цитата:

Сообщение от ekaterina22
В задаче нужно избавится от мутабельной переменной и вместо цикла использовать map.

Оно?

const command = "(al) G (al) () () G"
const o = {'(al)': 'al', '()': 'o'}
const val = command.split(' ').map(el => o[el] || el).join('')
alert(val)

рони 24.05.2021 19:32

ekaterina22,
let command = "(al) G (al) () () G", reg = /((?<=\()(.*?)(?=\)))|[^()\s]/g, empty = "o";
 function interpret(command, reg, empty)
 {
    return (command.match(reg)||[]).map(a => a ? a.trim() : empty).join("")
 }
  alert(interpret(command, reg, empty))

ekaterina22 24.05.2021 20:29

ksa,
оно, только не заметила, что в примере пробелы, а они не должны быть
command = "(al)G(al)()()G"

ksa 24.05.2021 21:04

Цитата:

Сообщение от ekaterina22
не заметила, что в примере пробелы, а они не должны быть

Вариант "без пробелов"...

const command = '(al)G(al)()()G'
const o = {'(al)': 'al', '()': 'o'}
const re = /\(.*?\)|./g
const val = command.match(re).map(el => o[el] || el).join('')
alert(val)

ksa 24.05.2021 21:10

ekaterina22, тут кагбэ и цикл-то не нужен совсем...

const command = '(al)G(al)()()G'
const o = {'(al)': 'al', '()': 'o'}
const re = /\((al)?\)/g
const val = command.replace(re,el => o[el])
alert(val)

ekaterina22 24.05.2021 22:09

ksa,
Согласна с вами, что цикл не нужен, но я учусь решать в разных вариациях.
Регулярные выражения не то, условия задачи избавится от мутабельной переменной и вместо цикла использовать map. Вот мне и интересен вариант решения


Часовой пояс GMT +3, время: 13:57.