diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d81edaad3705a3dca0942e1cbc01bff2624..3db969a6ef728584d7b35d2097656fd3a564807a 100644 --- a/src/react/ReactChildren.js +++ b/src/react/ReactChildren.js @@ -1,7 +1,53 @@ -function mapChildren(children, func, context) { - //TODO实现此mapChildren方法 - return children; +function judgeKey(children,index,keyindex){ + let key =keyindex + if(children.key){ + key= key+`$${children.key}` + }else{ + key=key+`${index}` + } + return key } +function judgeSecond(key){ + let reg = new RegExp('/.') + return reg.exec(key) +} + +function mapChildren(children,func){ + let res = [] + let index=0 + function mapAll(children,key){ + for(let i in children){ + if(children.hasOwnProperty(i)){ + if(Array.isArray(children[i])){ + let newkey = key+i+`:` + mapAll(children[i],newkey) + }else{ + let newkey = judgeKey(children[i],i,key) + if(judgeSecond(newkey)){//只可能不是array + children[i].key =newkey + res.push(children[i]) + }else{ + let funcres = func(children[i],index) + index++; + if(Array.isArray(funcres)){ + let secKey= newkey+'/.' + console.log(secKey) + mapAll(funcres,secKey) + }else{//不返回数组会进来 + let mapedkey = judgeKey(funcres,index,newkey+'/.') + funcres.key =mapedkey + res.push(funcres) + } + } + } + } + + } + } + mapAll(children,'.') + return res +} + export { mapChildren as map,