par*_*ent 4 javascript recursion yield-return typescript
我正在尝试重写一个 C# 函数,该函数使用yield
递归将类的实例从嵌套列表中提取到单个列表中。
这是 C# 函数:
public static IEnumerable<TargetObject> GetRecursively(params TargetObject[] startingObjects)
{
foreach (TargetObject startingObject in startingObjects)
{
yield return startingObject;
if (startingObject.InnerObjects != null)
foreach (TargetObject innerObject in startingObject.InnerObjects.ToArray())
foreach (TargetObject recursiveInner in GetRecursively(innerObject))
yield return recursiveInner;
}
}
Run Code Online (Sandbox Code Playgroud)
由于 javascript 不能可靠地支持yield
跨浏览器,我如何在这个复杂的函数中模拟它?
function getRecursively(...startingObjects: TargetObject[])
{
return function () {
??
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用 typescript(或 es6)变得非常简单
function* recursiveIterator( obj: { children?: any[]; } ):IterableIterator<any> {
yield obj;
for ( const child of obj.children ) {
yield* recursiveIterator( child );
}
}
Run Code Online (Sandbox Code Playgroud)