一、思路

       使用递归将多层对象转换为一层对象

二、具体实现

<!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>
02-13 12:29