gpt4 book ai didi

javascript - 循环遍历嵌套函数中的所有文档

转载 作者:行者123 更新时间:2023-11-30 05:31:12 26 4
gpt4 key购买 nike

我开始在我的一个新项目中使用 Couchbase,我希望你能帮我解决一个问题。我的存储桶中有两种类型的文档。例如:

{
"id": "A1",
"name": "Name of A",
"type": "A"
}

{
"id": "B1",
"name": "Name of B",
"type": "B",
"parentIDs": ["A1", "A4", "A5"]
}

我想创建一个具有以下结果的 View :

{
"id": "A1",
"name": "Name of A",
"type": "A",
"children": [
{JSON document of child 1},
{JSON document of child 2},
{JSON document of child 3}
]
}

我开始编写一个函数和一个嵌套函数,它应该遍历所有文档,但我必须投降......你能帮我吗?

function (doc, meta) 
{
if(doc.type == "A")
{
emit(doc, GetAllSites(doc));
}

function GetAllSites(doc)
{
var sites = [];

for(var i = 0; i < doc.length; i++)
{
sites.push(doc.id);
}

return sites;
}
}

谢谢

----------------更新----------------

我这样解决了我的问题:

// map function
function (doc, meta)
{
emit(meta.id, doc);
}

// reduce function
function (key, values, rereduce)
{
var result = [];

for(var i = 0; i < values.length; i++)
{
var val1 = values[i];

if(val1.type != "A")
continue;

val1.childrenIDs = [];

for(var j = 0; j < values.length; j++)
{
var val2 = values[j];

switch(val2.type)
{
case "B":
if(contains(val2.parentIDs, val1.id))
val1.childrenIDs.push(val2);
break;
default:
break;
}
}
result.push(val1);
}

return result;

function contains(a, obj) {
var i = a.length;
while (i--) {
if (a[i] === obj) {
return true;
}
}
return false;
}
}

可能不是“蓝图”解决方案,但它有效,我稍后会对其进行优化。 :-)

最佳答案

您不能使用嵌套函数,在这种情况下,我建议您在 map 函数之后使用 reduce 函数。所以你需要粘贴你的 GetAllSites 函数代码来减少并且不要忘记实现重用逻辑

关于javascript - 循环遍历嵌套函数中的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com