一、思路

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

二、具体实现

<!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>

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-28
  • 2022-01-11
  • 2022-02-15
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-01
  • 2021-11-11
  • 2022-12-23
  • 2021-04-26
  • 2022-12-23
  • 2021-07-31
相关资源
相似解决方案