去哪儿 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) #笔经##去哪儿#
查看18道真题和解析