gpt4 book ai didi

Javascript:在递归函数中初始化一次变量(如静态变量)

转载 作者:行者123 更新时间:2023-11-30 07:14:24 24 4
gpt4 key购买 nike

我有一个递归函数,它返回树的叶节点(以嵌套对象的形式):

var retrieve = function (a)
{
if (typeof retrieve.names == 'undefined') //would be true for the 1st pass only
retrieve.names = []
if (a.left != null)
retrieve (a.left)
if (a.right != null)
retrieve (a.right)
if (a.left == null && a.right == null)
retrieve.names.push(a)
return retrieve.names
}

这个函数的问题是,它对单个对象(树)工作得很好,但是当另一个对象传入参数时,它只是简单地将叶节点追加到已经从前一棵树获得的叶节点上。

例如,

// gets the leaf nodes of obj1 tree
obj1_leaves = retrieve(obj1)

// instead of only getting leaf nodes of obj2, it appends them to leaf nodes of obj1
obj2_leaves = retrieve(obj2)

现在的原因是 typeof retrieve.names == 'undefined' 仅在第一次时为真。每当再次调用此函数时,retrieve 函数(也可以将其视为对象)的成员 names 已被设置/初始化。

有没有一种方法可以仅在给定函数调用的递归函数中设置一个变量(或对象的成员),然后为另一个函数调用再次取消设置/设置它。

最佳答案

你可以使用一个内部函数:

function retrieve(a) {
var names = [];
function _retrieve(a) {
if (a.left != null)
_retrieve (a.left)
if (a.right != null)
_retrieve (a.right)
if (a.left == null && a.right == null)
names.push(a)
}
_retrieve(a);
return names;
}

外部函数将空数组初始化为局部变量。内部函数与原始函数的工作基本相同,但它引用了该本地数组。

每次调用 retrieve() 时,都会创建一个新的本地数组并用于遍历树。

关于Javascript:在递归函数中初始化一次变量(如静态变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268040/

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