From 9df259f38eea3d35e684135cd6eb325d96c72fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E6=B5=A9=E6=98=8E?= Date: Tue, 7 Apr 2020 18:53:11 +0800 Subject: [PATCH] map --- src/react/ReactChildren.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d8..6bacc18 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 { -- Gitee