diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d81edaad3705a3dca0942e1cbc01bff2624..a5a2bd605b8e0cf91dcca1818729b302aecb5fa4 100644 --- a/src/react/ReactChildren.js +++ b/src/react/ReactChildren.js @@ -1,8 +1,36 @@ +let result = []; +let count = 0; + function mapChildren(children, func, context) { - //TODO实现此mapChildren方法 - return children; + //TODO实现此mapChildren方法 + children.map((child, i) => { + invoke(child, count, func); + count++; + }); + return result; } -export { - mapChildren as map, -}; \ No newline at end of file +function invoke(child, count, func) { + if (!child) { + return null; + } + if (Array.isArray(child)) { + child.map((subChild, i) => { + subChild.count = i; + invoke(subChild, count, func); + }); + } else { + let tempRes = []; + if (child.count) { + tempRes = func(child, count + child.count); + } else { + tempRes = func(child, count); + } + if (tempRes && tempRes.length) { + tempRes.map((subRes) => { + result.push(subRes); + }); + } + } +} +export { mapChildren as map };