去哪儿 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)
#笔经##去哪儿#
全部评论
感觉python语法越看越牛逼怎么回事
1 回复
分享
发布于 2021-09-14 22:48

相关推荐

2 8 评论
分享
牛客网
牛客企业服务