Hej,
Użytkownik może w gui narzędzia wykilkać sobie dane, które chce wysłać przez api(rest). Dane w obiekcie, które podaje mi narzędzie są w nie sformatowane poprawnie pod użycie ich w payloadzie.
Założenia:
Kod musi obsłużyć zmienną ilość propertiesów, mogą mieć różną wartość(string, int, array).
Podstawową walidację zapewnia mi gui.
Obiekt jest używany tylko w jednym określonym miejscu, żaden inny kod nie ma do niego dostępu w momencie użycia/stworzenia.
Kod musi obsłużyć nulla w wartości, chce pomijać dane tego typu w zapytaniu ale to prosty przypadek i dodam to po testach tego co mam.
Przykładowe dane wystawione przez 'gui':
{
name: 'test',
attributes: [
{
name: 'attr name',
value: 'example'
},
{
name: 'another attr name',
value: 'another example'
}
],
description: 'something long and complicated'
}
Poniższy kod sformatuje to do:
{
"name": "test",
"attr name": "example",
"another attr name": "another example",
"description": "something long and complicated"
}
Czytając o dostępnych metodach wystarczajace funkcjonalnosci dadzą mi metody reduce() oraz assign().
function reduceArray (resArray) {
return resArray.reduce(function (acc, item) {
return Object.assign(acc, { [item.name]: item.value ?? item.id })
}, {})
}
function parseResultsObj (resObj) {
return Object.keys(resObj).reduce(function (acc, item) {
if (Array.isArray(resObj[item])) {
return Object.assign(acc, reduceArray(resObj[item]))
} else {
return Object.assign(acc, { [item]: resObj[item] })
}
}, {})
}
Chce tego koda używać w dwóch projektach(wtyczki do zewnętrznych narzędzi) i chce się upewnić co poprawić/zaorać/zmienić zanim mnie ugryzie coś czego nie przewidziałem. Docelowe obiekty są większe(max 100 properties) ale nie mają więcej poziomów zagnieżdzeń, ich struktura jest w miare stała.
Dzięki!