В моем приложении я проверяю равенство между свойством массива объектов и свойством вложенного объекта — на основе результатов я возвращаю новый массив объектов.
В items
массив объектов:
[{name: 'test', value: 1, category: 'a'},{name: 'test2', value: 2, category: 'b'},{name: 'test3', value: 3, category: 'b'},{name: 'test4', value: 4, category: 'c'}]
В categories
объект:
{testnum1: {name: 'test123', partialName: '123', category: 'a'}, testnum2: {name: 'test234', partialName: '234', category: 'b'}
Мне нужно проверить равенство между category
properties и вернуть следующий массив объектов:
[{name: 'test', itemCategory: 'testnum1'},{name: 'test2', itemCategory: 'testnum2'},{name: 'test3', itemCategory: 'testnum2'}]
Это то, что я сделал, есть идеи, как сделать его более читаемым?
function getLookupByKey(arr, key): any {
return [...new Map(arr.map(item => [item[key], item])).values()]
}
export function getCategorizedItems(items) {
const categorizedItems = items
.map(item=> {
const categorizedItem= categories[item.category]?.find(c =>
item.name.match(new RegExp(c.partialName))
)
return {
url: item.downloadURL,
category: categorizedItem?.category,
categoryName: categorizedItem?.name,
name: item.name,
lastChangedOn: item.lastChangedOn
}
})
.filter(item => item.category)
.sort(item => item.lastChangedOn)
return getLookupByKey(categorizedItems, 'category')