From 377df32ef37ca71f2bfd95fe6e46e785e05db737 Mon Sep 17 00:00:00 2001 From: gaoyingjian Date: Mon, 6 Apr 2020 16:13:30 +0800 Subject: [PATCH] =?UTF-8?q?=20#477#[2020/04/06]=E4=BD=9C=E4=B8=9A=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0react.mapchildren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/react/ReactChildren.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d8..5af5082 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 { -- Gitee