JavaScript римские в арабские несколько чисел

Подскажите, как сделать функцию, которая принимает строку ['I', '+', 'V'], возвращает ['1', '5']. У меня такой код:

function romain2arabic(string) {
  var r = 0;
  
  if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(string))
    throw new Error('Invalid Roman Numeral.');

    string.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {
    r += {M:1000, CM:900, D:500, CD:400, C:100, XC:90, L:50, XL:40, X:10, IX:9, V:5, IV:4, III:3, II:2, I:1}[i]; 
  });

  return r;

}

Но он работает, только с одной римской цифрой.


Ответы (2 шт):

Автор решения: Ilshat Nasyrov

Вам необходимо использовать Array.prototype.map()

let new_array = arr.map(function callback( currentValue[, index[, array]]) {
    // Возвращает элемент для new_array
}[, thisArg])

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/map

пример: let new_array = ['I', '+', 'V'].map(value => передать вашу функцию romain2arabic)

→ Ссылка
Автор решения: Иван Конкин

Рабочий вариант

function romain2arabic(string) {
  let arrSimvol = string.split(/[+*\/-]/g)
  
  let arrNum = []
  for (let i = 0; i < arrSimvol.length; i++) {
    let res = 0
    arrSimvol[i].replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {
      res += {M:1000, CM:900, D:500, CD:400, C:100, XC:90, L:50, XL:40, X:10, IX:9, V:5, IV:4, III:3, II:2, I:1}[i]
    })
  
    arrNum.push(res)
    
  }
  return arrNum
  
}

Получилось решить с помощью цикла for.

→ Ссылка