diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d81edaad3705a3dca0942e1cbc01bff2624..6bacc180db021d63b752f6b8f05dbd120e48a653 100644 --- a/src/react/ReactChildren.js +++ b/src/react/ReactChildren.js @@ -1,6 +1,26 @@ -function mapChildren(children, func, context) { +function mapChildren(reactChildren, func, context) { //TODO实现此mapChildren方法 - return children; + if(!Array.isArray(reactChildren)) return reactChildren + let idx = 0 + + function invoke(reactChildren,func,idx){ + reactChildren = reactChildren.reduce((pre,cur)=>{ + if(Array.isArray(cur)){ + let resultArr = invoke(cur,func,idx) + let tempArr = [...pre,...resultArr] + idx += tempArr.length -1 + return tempArr + }else if((typeof cur === 'object' && cur===null ) || typeof cur === 'undefined' ){ + return pre + }else{ + pre.push(func(cur,idx++) ) + } + return pre + },[]) + return reactChildren + } + + return invoke(reactChildren, func, idx); } export {