I am working on an API, and I want to return values based on some input I receive. For example, here is a body sample input
{
"fields": ["account", "id"]
}
Based on the fields array, I want my API to return only those values. Here is an example of the API implementation
...
const {fields} = req.body
const result = makeDataConversion(data)
const objKeys = result.map((i) => Object.keys(i)) // returns the keys from the arr of object of the result variable
// I am comparing the values in the fields array with the keys gotten from objKeys variable
if (fields) {
fields.forEach((items) => {
objKeys.forEach((item) => {
if (items.indexOf(item) > -1) {
const s = result.filter(item => {}) // stuck here
res.json({ s })
}
})
})
}
...
So the part where I indicate stuck here I want to loop through the result array of objects and return only the properties that match the values gotten from the field’s array.
Here is a typical API Response
status: true
message: "Data retrieved successfully"
data: [
{
"account": "john doe",
"date_registered": "10/10/1994",
"amount": "50000",
"isActive": "false"
"id": "34"
}
]
So my final API Response should be
status: true
message: "Data retrieved successfully"
data: [{"account": "john doe", "id": "34"}]
How do I go about this please.
Thank you
Advertisement
Answer
const apiResponse = {
status: true,
message: "Data retrieved successfully",
data: [
{
"account": "john doe",
"date_registered": "10/10/1994",
"amount": "50000",
"isActive": "false",
"id": "34"
},
{
"account": "john doe 2",
"date_registered": "10/10/1994",
"amount": "50000",
"isActive": "false",
"id": "35"
}
]
};
const fieldsInput = {
"fields": ["account", "id"]
};
const getFinalResult = (response) => {
const data = response.data.map(item => {
const result = {};
fieldsInput.fields.forEach(field => {
result[field] = item[field];
})
return result;
});
return {
...response,
data
}
};
const finalResult = getFinalResult(apiResponse);
console.log(finalResult);Just doing a .map() over your response and inside that map just iterate over your fields and returned the mapped result based on those fields.