diff --git a/childrenMap.js b/childrenMap.js new file mode 100644 index 0000000000000000000000000000000000000000..5d964fcd9205998bc27677427a9f9f6cd7d973cd --- /dev/null +++ b/childrenMap.js @@ -0,0 +1,38 @@ +const baseType = ['number', 'string', 'boolean'] +function childrenMap(children, cb) { + let result + if (baseType.indexOf(typeof children) > -1) { + result = [children].map(item => cb(item)) + } else if (Array.isArray(children)) { + result = children.flat(Infinity).map(item => { + if (baseType.indexOf(typeof item) > -1) { + return cb(item) + } else { + return childrenMap(item, cb) + } + }) + } else if (typeof children === 'object') { + result = Object.keys(children).map(item => { + if (baseType.indexOf(typeof children[item]) > -1) { + return cb(children[item]) + } else { + return childrenMap(children[item], cb) + } + }) + } + return result.flat(Infinity) +} + + +const b = childrenMap('a', item => item + '#') +const c = childrenMap({ name: 'ceshi' }, item => item + '#') +const d = childrenMap([1], item => item + '#') +const e = childrenMap([1, [2, 3]], item => item + '#') +const f = childrenMap({ name: 'ceshi',arr:[99] }, item => item + '#') +const g = childrenMap([1, [2, 3],{age:10}], item => item + '#') +console.log(b) +console.log(c) +console.log(d) +console.log(e) +console.log(f) +console.log(g) \ No newline at end of file