diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d81edaad3705a3dca0942e1cbc01bff2624..5af5082457dc880ecb35e9dcbac1f1f1144d93e2 100644 --- a/src/react/ReactChildren.js +++ b/src/react/ReactChildren.js @@ -1,6 +1,28 @@ function mapChildren(children, func, context) { - //TODO实现此mapChildren方法 - return children; + let res = [] + let list = Array.isArray(children)? children: [children] + const getCurKey = (item, index) => { + return `${item.key?`$${item.key}`:index}` + } + const flatten = (list, keyPrefix, parentIndex) => { + list.forEach((element, index) => { + if(Array.isArray(element)){ + flatten(element, `.${getCurKey(element, index)}`, index) + } else { + let tmpRes = func.call(context, element, parentIndex?parentIndex+index:index) + if(Array.isArray(tmpRes)){ + tmpRes.forEach((item, idx) => { + item.key = `${keyPrefix?`${keyPrefix}:${getCurKey(element, index)}`: `.${getCurKey(element, index)}`}/${`.${getCurKey(item, idx)}`}` + }) + } else { + tmpRes.key = `${keyPrefix?`${keyPrefix}:${getCurKey(element, index)}`: `.${getCurKey(element, index)}`}/${`.${getCurKey(tmpRes, 0)}`}` + } + res = res.concat(tmpRes) + } + }); + } + flatten(list) + return res; } export {