Open dave-wind opened 1 year ago
递归法 :前提
首先要找到 基线条件 和 递归条件
1.什么是递归条件? 就是函数不断调用自己的条件.
2.什么是基线条件? 就是停止自身调用的条件 避免死循环
思路:
1.从函数入参思考, 这个函数首先要递归,传入的是一个对象,一层一层取抽离,所以入参需要传递obj, 递归条件是 当子集是对象时,我们就需要不断调用自身,累加key所以还要想到 把key下去;
2.基线条件,当 obj[key] 不为对象的时候,就要停止调用; 拿到最底层的值 赋值即可
3. 肯定想到一个收集key value的全局值,传不传都可以
// 判断是否对象
function isObject(obj) {
return Object.prototype.toString.call(obj) == '[object Object]'
}
function flatObj(obj, prex = '', res = {}) {
for (let key in obj) {
let keyName = prex ? prex + '.' + key : key;
isObject(obj[key]) ? flatObj(obj[key], keyName, res) : res[keyName] = obj[key]
}
return res;
}
写个程序把 entry 转换成如下对象