Спасибо за чтение .
Допустим, у меня есть этот набор входных данных:
const S = "1C 5A 10F 1F 5E"; //Int are rows and Char are columns (ie. seat in a movie theater)
const N = 10; // Number between 1 to 100000
const Ob = { "A": 1, "B": 2, "C": 3,"D": 5, "E": 7, "F": 11, "G": 13,"H": 17, "J": 19, "K": 23};
Я хочу создать размер массива N
, где:
Int
значение минус 1 - это позиция в массиве.
Char
используется для получения значения в Ob
и добавил его в массив в позиции соответствующего Int
.
Если значение Int
повторяется (значение в той же строке), значение в массиве этой позиции следует умножить предыдущее значение на новое значение символа в Ob
.
Например (с учетом приведенных выше значений):
- Значение
1C
из S
должно выделять значение C
из Ob
в позиции 0 массива, так что
A[0] === 3;
- Если мы сделаем это для всех входов выше, результат должен быть
A = [33, 0, 0, 7, 0, 0, 0, 0, 0, 11]
Мне удалось сделать это с кодом ниже
//Resulting Array
A = Array(N).fill(0)
//Get string Int and Char into two arrays
let Columns = S.replace(/\d/g,'').split(' ');
let Rows = S.replace(/[A-K]/g,'').split(' ').map(Number);
//Replace values in A based on Rows and Columns values
Rows.forEach((value,i) => {A[value - 1] === 0 ? arrA[value - 1] = Ob[Columns[i]] : A[value - 1] = Ob[Columns[i]] * A[value - 1]});
Но я уверен, что должен быть более эффективный способ зацикливания только один раз (char
до char
) в S
, Что-то вроде кода ниже. Моя основная проблема заключается в управлении количеством цифр Int
(ie. 1, 10, 100, 1000, 10000 и т. Д. c.) При использовании пробела в качестве разделителей при циклической обработке строки на символ.
A = [...S].forEach(char => {});
Спасибо за помощь.