Вы можете разбить каждую строку на :\s+
, чтобы получить ключ и строку для анализа. Вы получите 2 значения в результирующем массиве. Используйте destructuring , чтобы получить их для разделения переменных
["CREATE", "id=14&amount=800¤cy=USD"]
Затем используйте конструктор URLSearchParams
для второго значения, чтобы получить пару ключ-значение из строки запроса.
Для некоторых ключей требуется amount
, а для некоторых ключей необходимо значение id
. Таким образом, вы можете создать объект Mapper. Это сопоставляет ключ с именем для поиска в URLSearchParams.
const mapper = {
PAY: "id",
CREATE: 'amount',
FINALIZE: 'amount',
default: "amount"
};
Здесь PAY
необходимо значение id
. Если у вас есть больше ключей, вы можете добавить их здесь. Вы также можете добавить CREATE: "amount"
к этому объекту. Но, поскольку это default
, я пропустил это. Ключ default
можно использовать, если ключ не найден в mapper
. Вернуть объект с ключом и значением из функции разбора.
Затем reduce
массив и объединить каждый проанализированный объект для создания выходных данных
const actions = ['CREATE: id=14&amount=800¤cy=USD', 'FINALIZE: id=14&amount=800¤cy=USD', 'PAY: id=14']
const mapper = {
PAY: "id",
//CREATE: 'amount', // you could add CREATE and FINALIZE if you want
default: "amount"
};
function parse(str) {
const [key, value] = str.split(/:\s+/);
const param = new URLSearchParams(value).get(mapper[key] || mapper.default);
return { [key.toLowerCase()]: param };
}
const output = actions.reduce((acc, str) => Object.assign(acc, parse(str)), {});
console.log(output)