一、思路
使用递归将多层对象转换为一层对象
二、具体实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> var obj = { x: 1, y: { a: 2, b: { c: 3, d: 4 } } }; //str='[{"a.b":1,"a.b.c":2}]' //console.log(JSON.parse(str)); //获取对象所有的key值 function getKeys(obj, path) { //es6新语法 Object.prototype.toString()方法精准判断参数值属于哪种类型 if(Object.prototype.toString.call(obj) === "[object Object]") { var arrKeyValue = {};//保存里面的key=value //()()制造一个新的作用域 (function getKeysFn(o, char) { for(var key in o) { // debugger //判断对象的属性是否需要拼接".",如果是第一层对象属性不拼接,否则拼接"." var newChar = char == "" ? key : char + "." + key; if(Object.prototype.toString.call(o[key]) === "[object Object]") { //如果属性对应的属性值仍为可分解的对象,使用递归函数继续分解,直到最里层 getKeysFn(o[key],newChar); } else { arrKeyValue[newChar] = o[key] } } })(obj,""); } else { console.log("传入的不是一个真正的对象哦!"); } return arrKeyValue[path] } console.log(getKeys(obj,'y.a')); </script> </body> </html>