尝试在树javascript中递归查找元素
我试图弄清楚如何在json树中递归搜索元素。例如,我现在正试图达到'水果',但不知道如何做到这一点。这是我的json对象尝试在树javascript中递归查找元素,javascript,Javascript,我试图弄清楚如何在json树中递归搜索元素。例如,我现在正试图达到'水果',但不知道如何做到这一点。这是我的json对象 [ { "_id": "604cab0acbdb8c1060698419", "name": "Grocery", "children": [ { "chi
[
{
"_id": "604cab0acbdb8c1060698419",
"name": "Grocery",
"children": [
{
"children": [
{
"name": "Fruits",
"price": "200"
}
],
"_id": "604cad9b4ae51310c6f313f6",
"name": "Potatoes",
"price": "200"
},
{
"children": [],
"_id": "604cae721257d510e679a467",
"name": "Vegetables"
}
],
"date": "2021-03-13T12:07:38.186Z",
"__v": 0
} ]
function findName(name, tree) {
if(tree.children.name == name {
return tree;
}
if(tree.child == 0) {
return
}
return findName(name, tree);
};
您的实现有几个问题
子属性
将其视为节点子项
上查找名称
,但子项
是一个数组findName
。如果达到这一点,您将不断调用自己,直到堆栈空间用完为止function findName(name, children) {
if (Array.isArray(children)) {
// Yes, check them
for (const childNode of children) {
if (childNode.name === name) {
// Found it
return childNode;
}
// Look in this node's children
const found = findName(name, childNode.children);
if (found) {
// Found in this node's children
return found;
}
}
}
}
实例:
const树=[
{
“_id”:“604cab0acbdb8c1060698419”,
“名称”:“杂货店”,
“儿童”:[
{
“儿童”:[
{
“名称”:“水果”,
“价格”:“200”
}
],
“_id”:“604cad9b4ae51310c6f313f6”,
“名称”:“土豆”,
“价格”:“200”
},
{
“儿童”:[…],
“_id”:“604cae721257d510e679a467”,
“名称”:“蔬菜”
}
],
“日期”:“2021-03-13T12:07:38.186Z”,
“_v”:0
} ];
函数findName(名称、子级){
if(数组.isArray(子数组)){
//是的,检查一下
for(子节点的const childNode){
if(childNode.name==name){
//找到了
返回子节点;
}
//查看此节点的子节点
const found=findName(名称,childNode.children);
如果(找到){
//在此节点的子节点中找到
发现退货;
}
}
}
}
console.log(findName(“水果”,tree))代码>您的实现存在几个问题
您的起点是一个数组,但通过尝试使用其子属性
将其视为节点
您正在子项
上查找名称
,但子项
是一个数组
您在接收的末尾将相同的内容传递到findName
。如果达到这一点,您将不断调用自己,直到堆栈空间用完为止
循环遍历数组中的节点,检查它们及其子节点;见评论:
function findName(name, children) {
if (Array.isArray(children)) {
// Yes, check them
for (const childNode of children) {
if (childNode.name === name) {
// Found it
return childNode;
}
// Look in this node's children
const found = findName(name, childNode.children);
if (found) {
// Found in this node's children
return found;
}
}
}
}
实例:
const树=[
{
“_id”:“604cab0acbdb8c1060698419”,
“名称”:“杂货店”,
“儿童”:[
{
“儿童”:[
{
“名称”:“水果”,
“价格”:“200”
}
],
“_id”:“604cad9b4ae51310c6f313f6”,
“名称”:“土豆”,
“价格”:“200”
},
{
“儿童”:[…],
“_id”:“604cae721257d510e679a467”,
“名称”:“蔬菜”
}
],
“日期”:“2021-03-13T12:07:38.186Z”,
“_v”:0
} ];
函数findName(名称、子级){
if(数组.isArray(子数组)){
//是的,检查一下
for(子节点的const childNode){
if(childNode.name==name){
//找到了
返回子节点;
}
//查看此节点的子节点
const found=findName(名称,childNode.children);
如果(找到){
//在此节点的子节点中找到
发现退货;
}
}
}
}
console.log(findName(“水果”,tree))代码>
const对象=[
{
“_id”:“604cab0acbdb8c1060698419”,
“名称”:“杂货店”,
“儿童”:[
{
“儿童”:[
{
“名称”:“水果”,
“价格”:“200”
}
],
“_id”:“604cad9b4ae51310c6f313f6”,
“名称”:“土豆”,
“价格”:“200”
},
{
“儿童”:[…],
“_id”:“604cae721257d510e679a467”,
“名称”:“蔬菜”
}
],
“日期”:“2021-03-13T12:07:38.186Z”,
“_v”:0
} ]
函数查找(名称、树){
//树未定义,返回“未定义”(基本大小写)
如果(!tree)返回
if(数组.isArray(树)){
//树是一个数组
//所以迭代数组中的每个对象
for(设i=0;i
const对象=[
{
“_id”:“604cab0acbdb8c1060698419”,
“名称”:“杂货店”,
“儿童”:[
{
“儿童”:[
{
“名称”:“水果”,
“价格”:“200”
}
],
“_id”:“604cad9b4ae51310c6f313f6”,
“名称”:“土豆”,
“价格”:“200”
},
{
“儿童”:[…],
“_id”:“604cae721257d510e679a467”,
“名称”:“蔬菜”
}
],
“日期”:“2021-03-13T12:07:38.186Z”,
“_v”:0
} ]
函数查找(名称、树){
//树未定义,返回“未定义”(基本大小写)
如果(!tree)返回
if(Array.isArray)