【本题来自牛客网,解题方法也借鉴于牛客网上讨论区中的多种答案,在此做一个总结】

parse方法需要实现的效果如下:

var object = {b: { c: 4 }, d: [{ e: 5 }, { e: 6 }]
};
console.log( parse(object, ‘b.c’) == 4 ) //true
console.log( parse(object, ‘d[0].e’) == 5 ) //true
console.log( parse(object, ‘d.0.e’) == 5 ) //true
console.log( parse(object, ‘d[1].e’) == 6 ) //true
console.log( parse(object, ‘d.1.e’) == 6 ) //true
console.log( parse(object, ‘f’) == ‘undefined’ ) //true

先来理解一下这个方法需要实现什么功能,简单来说就是传入两个参数,第一个参数为待访问的一个对象,第二个参数为一个字符串,字符串中是调用对象中的值的语句,parse()方法需要根据字符串中的语句访问object对象,并返回访问的结果。

那么,怎么实现这个方法呢。

可以看到题中传入的字符串中的语句,有点表示法和方括号表示法,将字符串中的字母分割出来放进数组,再迭代访问object对象。

解决方案1:

在访问对象之前,先将"["转换成"."并将"]"转换成""。

接着用split分割字符串。

用map函数迭代分割后的数组,呈现obj[b[c]]的形式访问object。

function parse(obj, str) {str.replace('[', '.').replace(']', '').split('.').map((ele) => obj = obj[ele.trim()]);return obj || 'undefined';
}

解决方案2:

function parse(obj, str) {var arr = str.replace('[', '.').replace(']', '').split('.');//循环方法迭代访问for(var i=0;i<arr.length;i++) {if (obj[arr[i]]) {obj = obj[arr[i]];}else {return 'undefined';}}return obj;
}

解决方案3:

function parse(obj, str) {//使用reduce迭代var o = str.replace('[', '.').replace(']', '').split('.').reduce((pre,cur) => cur ? pre[cur] : pre,obj);return o || 'undefined';
}

解决方案4:

//不替换掉中括号,直接判断分割字符串
function parse(obj, str) {var o = str.split(/\.|\[|\]/).reduce((pre,cur) => cur ? pre[cur] : pre,obj);return o || 'undefined';
}

解决方案5:

这可能是最简洁的方法了...但是好像有点违背了题目的本意?:)

//使用eval()直接执行访问语句
function parse(obj, str) {obj = eval('obj.'+str);return obj || 'undefined';
}

end

转载于:https://www.cnblogs.com/xiaokeai0110/p/9688242.html

【练习】实现一个parse方法(需要实现的效果见内容),方法总结相关推荐

  1. 一个用泛型隐式传递权限关键字的方法

    最近和IBM在重新做公司的平台,其中涉及多租户问题,之前处理多租户数据隔离时考虑很简单,直接把权限关键字作为每个方法的参数传递给DAO.带来的问题是在编码过程中有部分同事经常会忘记添加,维护也有些麻烦 ...

  2. java编译会产生多少个类文件,编译一个定义了三个类和四个方法的Java源程序文件,总共会产生多少个字节码文件 ? ( )...

    编译一个定义了三个类和四个方法的Java源程序文件,总共会产生多少个字节码文件 ? ( ) 更多相关问题 论述风化作用基本概念及其主要类型. 什么是药用植物 学?其 研究任务是什么 ? 庐山瀑布很有名 ...

  3. python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...

    实例如下所示: import os allFileNum = 0 def printPath(level, path): global allFileNum ''''' 打印一个目录下的所有文件夹和文 ...

  4. python怎么导入txt文件夹-python读取一个目录下所有txt里面的内容方法

    实例如下所示: import os allFileNum = 0 def printPath(level, path): global allFileNum ''''' 打印一个目录下的所有文件夹和文 ...

  5. java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...

    [填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...

  6. android库项目管理,一个android工程代码多个差异化项目管理方法探讨

    一个android工程代码多个差异化项目管理方法探讨 核心提示: 1.工程代码中尽量不要使用产品名称.设备名称之类的东西来区分,尽量以功能名称来区分,在工程独立的配置文件中再去配置这个文件: 2.在c ...

  7. struts2中一个表单中提交多个请求(动态调用方法)

    在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit按钮,Struts2中提供了另外一种方法,使得无需要配置可以在同一个action类中执行不同的方法(默认 ...

  8. java把一个list_java中将一个List等分成n个list的工具方法(推荐)

    实例如下: /** * 将一个list均分成n个list,主要通过偏移量来实现的 * @param source * @return */ public static List> average ...

  9. 最长不重复字符串python_Python简单实现查找一个字符串中最长不重复子串的方法...

    本文实例讲述了Python简单实现查找一个字符串中最长不重复子串的方法.,具体如下: 刚结束的一个笔试题,很简单,不多说简单贴一下具体的实现: #!usr/bin/env python #encodi ...

最新文章

  1. 计算机主机外设接口,计算机是如何自动识别外设~~凯凯最终成果!
  2. FileChannel
  3. 如何编写服务器文档记录
  4. C#架构设计-程序运行时从xml配置文件中加载配置项并设置为全局变量
  5. kata_小规模流处理kata。 第1部分:线程池
  6. CSS的float和position
  7. Scala深入浅出实战经典---001-Scala开发环境搭建和HelloWorld解析
  8. Codeforces Beta Round #94 (Div. 1 Only)A. Statues
  9. 【CSDN软件工程师能力认证学习精选】十分详细的React入门实例
  10. 【unity 保卫星城】--- 开发笔记08(太空站篇)
  11. kinect v2 面部模型
  12. 谷歌浏览器解决跨域问题 --disable-web-security --user-data-dir
  13. element ui 中级联选择器,点击完下拉框收回
  14. 内蒙古师范大学计算机科学技术学院分数线,2019内蒙古师范大学录取分数线及历年专业分数线统计表【文科 理科】...
  15. 【编程笔试】美团2021校招笔试-通用编程题第4场(附思路及C++代码)
  16. arxiv文章下载很慢怎么办?
  17. 读书有益——》《让我留在你身边》
  18. 学计算机广东2B大学,广东2b大学排名2018及名单
  19. 网易互娱人工智能工程师笔试题
  20. CRC32原理及实现学习

热门文章

  1. wordpress列表页调用浏览器,wordpress显示文章浏览量!
  2. 面试突击32:为什么创建线程池一定要用ThreadPoolExecutor?
  3. H264参数语法文档: SPS、PPS、IDR
  4. VS2010删除所有断点时不弹出提示窗口
  5. [react] 写出React动态改变class切换组件样式
  6. 前端学习(3311):redux的state hook对象
  7. 前端学习(2921):vue的事件
  8. [html] 制作页面时,前端如何适应各种异形屏?
  9. [html] 如何让pre标签中的元素自动换行?
  10. 前端学习(2659):组件间传参