如若梦似彩虹 2022-05-04 13:52:51
实现思路:
- 对象entry的key中含有的
.
就是一个对象嵌套,所以可以用split()
函数将其划分为一个array,所以array的length - 1下标所对应的元素就是entry的一个key的具体值。 - 利用对象为地址引用原理,进行增加元素。
- 采用
reduce
函数,将每一次的引用返回。
const entry = { 'a.b.c.dd': 'abcdd', 'a.d.xx': 'adxx', 'a.e': 'ae', }; const changObjStructureOfNormal = output => { const keys = Object.keys(output); const resObj = {}; for (const key of keys) { const everyKey = key.split('.'); everyKey.reduce((pre, next, index, array) => { if (index === array.length - 1) { pre[next] = output[key]; return; } pre[next] = pre[next] || {}; return pre[next]; }, resObj); } return resObj; }; changObjStructureOfNormal(entry);
如若梦似彩虹 2022-05-04 13:50:49
看了类型判断的下一篇,里面讲到window的时候,大佬用了一段obj === obj.window
。直接让我惊呆了,js的对象居然还能用===
来判断的?然后去测试了下,很震惊的发现,诸如window
、location
、history
这样的浏览器相关的对象,Object.prototype.toString.call方法都是单独识别出来。。。这还是头一次发现orz而且它们全都能通过===
来和自身相等,当然这一点应该是因为内存中这些浏览器相关对象都只有一份。
由此也学到了一个知识点:js中的===
并非对所有引用类型的数据进行判断时都为false,对于那些接近“单例”形式的对象,是可以和自身全等的。(知识点get)
- 共 1 页
- 1
第 92 题:已知数据格式,实现一个函数 fn 找出链条中所有的父级 id