diff --git a/homework/716.md b/homework/716.md new file mode 100644 index 0000000000000000000000000000000000000000..40c56613fe0490bbdef873de81ce9415ff7ad0f4 --- /dev/null +++ b/homework/716.md @@ -0,0 +1,49 @@ +``` +//生成一个无任何关联的对象 +function getPooledTraverseContext(result:any,fn:any) { + let obj = Object.create(null); + obj.fn = fn; + obj.result = result; + return obj; +} +let flag = true; +function mapSingleChildIntoContext(bookKeeping:any, child:any, childKey:any) { + var result = bookKeeping.result, + func = bookKeeping.fn; + var mappedChild = func.call(null, child, bookKeeping.count++); + flag = flag ? false : flag; + if(Array.isArray(mappedChild)){ + mapIntoWithKeyPrefixInternal(mappedChild,result,(c:any)=>c); + } else if (mappedChild != null) { + result.push(mappedChild); + } +} +function traverseAllChildrenImpl(children:any, nameSoFar:any, callback:any, traverseContext:any) { + if(flag || !Array.isArray(children)){ + callback(traverseContext,children) + } + if(Array.isArray(children)){ + for(let i = 0;i < children.length;i++){ + let child = children[i]; + traverseAllChildrenImpl(child,nameSoFar,callback,traverseContext); + } + } +} +function traverseAllChildren(childrens:any,callback:any,traverseContext:any,prifx = '') { + return traverseAllChildrenImpl(childrens, '', callback, traverseContext); +} +function mapIntoWithKeyPrefixInternal(childrens:any,result:any,fn:any) { + var traverseContext = getPooledTraverseContext(result,fn); + traverseAllChildren(childrens,mapSingleChildIntoContext,traverseContext) +} +// 我的map方法的实现 +function myMapChildren(childrens:any,fn:any) { + if(childrens == null){ + return childrens; + } + var result:any = []; + mapIntoWithKeyPrefixInternal(childrens,result,fn); + return result; +} + +``` \ No newline at end of file diff --git a/img/avatar.png b/img/avatar.png new file mode 100755 index 0000000000000000000000000000000000000000..910202d25636f3714916db0de77ea36b10f6f83a Binary files /dev/null and b/img/avatar.png differ