我遇到了这个简单函数的困难。
我的目标是将一个带有点符号的字符串解析成嵌套对象。
一个示例数组:
我想在RESTful API中使用它,以便可以填充嵌套的mongoose文档。我将传递populate数组到我的express路由中的“.populate(...)”函数。
一个示例数组:
["image", "groups", "groups.tasks", "groups.image"]
我应该给这个吗:
[{
path: "image",
populate: []
}, {
path: "groups",
populate: [{
path: "tasks",
populate: []
}, {
path: "image",
populate: []
}]
}]
我的代码如下:
let populate = [];
const query = ["image", "groups", "groups.tasks", "groups.image"];
function parse(str, arr) {
let c = str.split(".");
let p = c.shift();
console.log(c)
let entry = {
path: p,
populate: []
};
if (c.length > 0) {
console.log("Add to '%s'", p, c)
parse(c.join("."), entry.populate);
} else {
arr.push(entry);
}
}
query.forEach(function (str, index) {
parse(str, populate);
});
console.log(populate)
我只得到了父数组,没有子元素:
[ { path: 'image', populate: [] },
{ path: 'groups', populate: [] } ]
我想在RESTful API中使用它,以便可以填充嵌套的mongoose文档。我将传递populate数组到我的express路由中的“.populate(...)”函数。
e.g:
GET /api/computer?populate=image,groups,group.tasks
嵌套对象的深度不应受限制。
通过我的研究,我找到了这个答案: 如何将字符串点表示法转换为嵌套对象? 但我不确定如何修改它以达到我的目标。