Вы можете создать функцию, используя _.flow()
, которая разбивает объект на массив записей (_.pairs()
), группирует по номеру в ключе и затем отображает результат обратно в объект (_.fromPairs
),и обновляет ключи (_.mapKeys()
).
const { flow, toPairs, groupBy, partialRight: pr, map, fromPairs, mapKeys } = _;
const pattern = /_+(\d+)$/;
const getKeyId = ([k]) => (k.match(pattern) || [''])[0];
const fn = flow(
toPairs, // convert to entries
pr(groupBy, getKeyId), // group by the number in the key
pr(map, flow( // map back to object
fromPairs, // combine the entries in the group
pr(mapKeys, (v, k) => k.replace(pattern, '$1')) // update the keys
))
);
const data = {
amount_2 : "1000",
amount_3 : "1200",
date_2 : "15/2/2019",
date_3 : "15/3/2019",
modeOfPayment_2: "Cash",
modeOfPayment_3: "Cash",
note_2 : "áßðáßðáßð↵áß",
note_3 : "",
refNum_2 : "11111",
refNum_3 : "Fffff",
submittedByID_2: "T62tgJcjieSJsAEJT69VfpRc5Mw2",
submittedByID_3: "T62tgJcjieSJ"
};
const result = fn(data);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
И то же решение, используя lodash / fp :
const { flow, toPairs, groupBy, map, fromPairs, mapKeys, replace } = _;
const pattern = /_+(\d+)$/;
const getKeyId = ([k]) => (k.match(pattern) || [''])[0];
const fn = flow(
toPairs, // convert to entries
groupBy(getKeyId), // group by the number in the key
map(flow( // map back to object
fromPairs, // combine the entries in the group
mapKeys(replace(pattern, '$1')) // update the keys
))
);
const data = {
amount_2 : "1000",
amount_3 : "1200",
date_2 : "15/2/2019",
date_3 : "15/3/2019",
modeOfPayment_2: "Cash",
modeOfPayment_3: "Cash",
note_2 : "áßðáßðáßð↵áß",
note_3 : "",
refNum_2 : "11111",
refNum_3 : "Fffff",
submittedByID_2: "T62tgJcjieSJsAEJT69VfpRc5Mw2",
submittedByID_3: "T62tgJcjieSJ"
};
const result = fn(data);
console.log(result);
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>