Использование .filter()
потребует от вас записи 1 фильтра для каждого шаблона, который вы хотите сопоставить, назначенного переменной.
Рекомендуется использовать .reduce()
, и его легче расширить для поддержки большего количества шаблонов.
Поначалу это может показаться пугающим, но вы, по сути, используете accumulator
в качестве временной переменной, которая сохраняется и переносится на каждую итерацию. И каждая итерация массива даст вам текущее итеративное значение с currentValue
.
Я добавил something-else
в качестве примера добавления нового шаблона.
var id = [
"provider-send-credit-transfer",
"provider-send-debit-fund",
"provider-receive-credit-transfer",
"provider-receive-debit-fund",
"something-else-credit-transfer",
"something-else-debit-fund"
];
const {
'provider-send': result_sn,
'provider-receive': result_rcn,
'something-else': result_ste
} = id.reduce(function(accumulator, currentValue) {
let prefix = currentValue.match(/^\w+-\w+/)[0];
return {...accumulator, [prefix]: (accumulator[prefix] || []).concat(currentValue)}
}, {});
console.log(result_sn);
console.log(result_rcn);
console.log(result_ste);