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.