美文网首页
现有 Json 数据,格式如下: json = { "a": [

现有 Json 数据,格式如下: json = { "a": [

作者: 心大的少年 | 来源:发表于2020-05-27 10:32 被阅读0次

    完整题目:现有 Json 数据,格式如下: json = { "a": [ { "b": "c" } , ... ] , ... }; 请实现一个方法:get(json, "a[0].b"),使其返回值为 c。要求:自己实现遍历逻辑,不允许使用正则表达式、不允许使用 eval()等类似方法

     // 测试用例: json = { "a": [ { "b": "c" }, "d" ], "x": 1} get(json, "a[0].b") == "c" get(json, "a[1]") == "d" get(json, "x") == 1
    

    对象里面访问的话基本也就是使用.访问属性或者是[]访问数组 ,所以这里关键是把数组的访问方式[]改成.的形式。这样就能获取到类似a.b.c.d.e这样的一段字符串

    function get(json, str) {
      str = str.split('').map(s => {
        if (s === '[') return '.';
        else if (s === ']') return '';
        return s;
      }).join(''); // 这样就能获取到a.b.c.d这样的字符串,然后再把字符串分割
    return  str.split('.').reduce((acc, current) => acc[current], json);
    }
    

    如果允许使用正则

    function get(json, str) {
      // 这里的$0是会获取到匹配到的整体,$1则是中括号中的内容
      str = str.replace(/\[(\w+)\]/, ($0, $1) => `.${$1}`);
      return  str.split('.').reduce((acc, current) => acc[current], json);
    }
    

    相关文章

      网友评论

          本文标题:现有 Json 数据,格式如下: json = { "a": [

          本文链接:https://www.haomeiwen.com/subject/ytjoahtx.html