gpt4 book ai didi

javascript - 如何使用递归函数来处理数组?

转载 作者:行者123 更新时间:2023-12-03 09:22:56 25 4
gpt4 key购买 nike

这是源数据。我想在源代码中使用“hello”,找到“up”,最后得到一个数组“[max,min]”(就像多棵树一样,找到根)

var obj = {
'hello': {

"up": "world",
"down": "ccc"
},
'world': {

"up": ["max","min"],
"down": "hello"
},
'max': {

"up": null,
"down": "world"
},
'min': {

"up": null,
"down": "world"
},
'ccc': {

"up": "hello",
"down": null
}

}

我使用了递归函数,但下面的代码不起作用。它返回“未定义”。 (如果“up”不是数组,则该函数有效。)

function findRoot(source,key){

var up = source[key]['up'];

if(up==null){

return key

}else{
if(Object.prototype.toString.call(up)=='[object Array]'){

up.forEach(function(d){

return findRoot(source,d);

})

}else{

return findRoot(source,up)
}

}
}

如何修复此代码?

最佳答案

您不会在“if array”情况下返回任何内容:

if(Object.prototype.toString.call(up)=='[object Array]'){
up.forEach(function(d){
return findRoot(source,d);
})
// no return

当您不指定返回值时,JavaScript 将默认返回 undefined

另请注意,forEach 函数不会对您从函数返回的值执行任何操作。一种替代方法是使用 map 函数,然后再次返回该数组:

var results = up.map(function(d) {
return findRoot(source, d);
});
return array;

但是,这也可能不完全符合您的意图。由于代码的唯一基本情况是值为 null 时,因此您的函数最终只会返回 null 或包含 null 的数组,而不是有意义的值。例如,调用 findRoot(obj, 'hello'); 将返回 [null, null],这可能不是您想要的。

如果是这种情况,您可能需要重新思考递归函数到底要做什么+考虑添加更多基本情况,或修改现有的基本情况和递归情况。

关于javascript - 如何使用递归函数来处理数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788164/

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