Im receiving a set of filters as a composed object in my express server. In order to create the query I came to the conclusion of splitting each object route into a separate array of keys.
Example:
$and: {
age: [21, 22],
name: {
$like: "Alice"
}
}
What I want:
[$and,age,[21, 22]] [$and,name,$like,"Alice"]
Any clue in solving this problem would be much appreciated.
Advertisement
Answer
This should work. It uses a recursive function to go through each item of the object and make a route for each value.
const obj = {
$and: {
age: [21, 22],
name: {
$like: "Alice"
}
}
};
function getRoute(o) {
const result = [];
const route = (subObj, keyIndex = 0, path = []) => {
const keys = Object.keys(subObj);
if (typeof subObj === 'object' && !Array.isArray(subObj) && keys.length > 0) {
while (keyIndex < keys.length) {
route(subObj[keys[keyIndex]], 0, [...path, keys[keyIndex]]);
keyIndex++;
}
} else {
result.push([...path, subObj]);
}
};
route(o);
return result;
}
console.log(JSON.stringify(getRoute(obj))); // Returns an string
console.log(getRoute(obj)); // Returns an array