gpt4 book ai didi

Javascript,递归函数读取记录

转载 作者:行者123 更新时间:2023-11-30 20:42:10 25 4
gpt4 key购买 nike

我正在尝试读取通过名为 parent 的列相互连接的记录,关系可以是双方的一个或多个。

我试图做一个递归函数,但没有成功。我把它做得好几次太复杂了,而且效果不是很好!您知道这方面的标准方法吗?

示例数据:

id       parent_id

Record1 main
RecordA1 Record1
RecordA2 Record1
RecordB1 RecordA1
RecordC1 RecordB1

我写的初始代码:

data.first_parent_id = main_parent_id;
data.categories = [];

function getCategories(parent_id) {
// -> get data with column parent_id == parent_id input parameter
data.categories.push({
id: id,
parent_id: gr.getValue('parent_id')
});

return data.categories;
}

getCategories(data.first_parent_id);

我正在尝试获取这样的对象数组:

  obj = {
id: record1,
children: [
{
id: RecordA1,
children: [
id: RecordB1,
children: [
id: RecordC1,
children: [

]
]
]

},
{
id: RecordA2,
children: []
},
{
id: value,
children: []
}
]
};

有什么建议/提示吗?

非常感谢

最佳答案

假设类别的结构如下:

此方法使用函数 reduce 以及递归函数来查找父节点。

//  id          parent_id
var categories = [
['Record1'],
['RecordA1', 'Record1'],
['RecordA2', 'Record1'],
['RecordB1', 'RecordA1'],
['RecordC1', 'RecordB1']
];

//  id          parent_id
var categories = [
['Record1'],
['RecordA1', 'Record1'],
['RecordA2', 'Record1'],
['RecordB1', 'RecordA1'],
['RecordC1', 'RecordB1']
];

var result = categories.reduce(function (acc, cat) {
var id = cat[0], parent = cat[1];

function findParent(obj) {
if (obj.id === parent) return obj;
else {
if (obj.children) {
for (var c of obj.children) {
var f = findParent(c);
if (f) return f;
}
}
}
}

function getObject() {
return { id: id, children: [] };
}

if (parent) {
var found = findParent(acc);
if (found) {
found.children.push(getObject());
} else {
acc = Object.assign(acc, getObject());
}
} else {
acc = getObject();
};

return acc;
}, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于Javascript,递归函数读取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49141306/

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