去哪儿 9.14 前端笔试
前两题很简单,就不写了,比较有意思的是第三题。
数据代理
编写一个 dataProxy 函数,它能实现这样的效果:
- 无效的递归属性查询,返回
undefined
输入:dataProxy({ret: true, data:{n: 1, count: {t: 2}}}).a.b.c.d()
输出:undefined
- 无效的递归属性查询+默认值参数,返回默认值
输入:dataProxy({ret: true, data:{n: 1, count: {t: 2} }}).a.b.c.d(true)
输出:true
- 有效的递归属性查询,返回查询到的结果
输入:dataProxy({ret: true, data:{n: 1, count: {t: 2} }}).data.count()
输出:{t: 2}
function dataProxy(data, path = []) { /* Write Code Here */ } let res; var _case = read_line(); res = eval(_case); print(res);
我的实现 (不借助提供的第二个参数 path)
function dataProxy(data) { const dataType = typeof data; const fn = d => dataType === 'undefined' ? d : data; return new Proxy(fn, { get(target, property) { if (dataType === 'undefined' || data === null) return dataProxy(); return dataProxy(data[property]); } }); } let res; var _case = read_line(); res = eval(_case); print(res);
Python 写法
class dataProxy: def __init__(self, data=None): self._dict = data def __getattr__(self, name): if isinstance(self._dict, dict) and name in self._dict: return dataProxy(self._dict[name]) else: return dataProxy() def __call__(self, default=None): return self._dict if self._dict is not None else default _case = input() res = eval(_case) print(res)#笔经##去哪儿#