// 方案 1function recursionFlat(ary = []) {const res = []ary.forEach(item => {if (Array.isArray(item)) {res.push(...recursionFlat(item))} else {res.push(item)}})return res}// 方案 2function reduceFlat(ary = []) {return ary.reduce((res, item) => res.concat(Array.isArray(item) ? reduceFlat(item) : item), [])}// 测试const source = [1, 2, [3, 4, [5, 6]], '7']console.log(recursionFlat(source))console.log(reduceFlat(source))
Object Flat
function objectFlat(obj = {}) {const res = {}function flat(item, preKey = '') {Object.entries(item).forEach(([key, val]) => {const newKey = preKey ? `${preKey}.${key}` : keyif (val && typeof val === 'object') {flat(val, newKey)} else {res[newKey] = val}})}flat(obj)return res}// 测试const source = { a: { b: { c: 1, d: 2 }, e: 3 }, f: { g: 2 } }console.log(objectFlat(source));
Flat化数组或者对象主要用于把复杂的结构梳理出来,有一个很重要的实践就是对应的react的菜单的效果的实践效果的实践
