search

Home  >  Q&A  >  body text

javascript - 分别用react,angular,vue取得json的key。

分别用react\angular\vue如何获取json数据的key名?

var jaa= {
    "a":123,
    "b":[
        {"x1":123,"x2":321},
        {"x1":123,"x2":321}
    ]
}

( ̄▽ ̄|||) 这个。
那啥,我就是想要让rav把比如上面这个json的所有key(a,b,x1,x2)全部输出出来,这个应该是框架的事吧(弱)

巴扎黑巴扎黑2896 days ago334

reply all(3)I'll reply

  • 阿神

    阿神2017-04-10 17:02:47

    • 单个对象

    Object.keys({a:1,b:2,c:3}) // ["a","b","c"]
    • 复合对象

    const target = {a:{x:1,y:2},b:2,c:3};
    
    var getObjectKeys = target =>Object.keys(target)
            .reduce((curr,key)=>curr.concat([key]).concat((typeof target[key]==="object")?
                getObjectKeys(target[key]):[])
                ,[])
            //防止key重复
            .reduce((curr,key)=>curr.concat(curr.indexOf(key)<0?[key]:[]),[])
            
    getObjectKeys(target) //["a", "x", "y", "b", "c"]
    
    /** test **/
    
    getObjectKeys({shandenabian:1,haidenabian:2}) 
    //["shandenabian","haidenabian"]
    
    getObjectKeys({you:{yi:2,ge:{"da":true,"shuibi":true}}})
    //["you", "yi", "ge", "da", "shuibi"]
    
    getObjectKeys({you:{yi:2,ge:{"da":true,"shuibi":true}},"shuibi":1})
    //["you", "yi", "ge", "da", "shuibi"]

    上述方法在处理循环嵌套对象的时候可能会有陷入死循环,但处理JSON应该是没问题的,因为JSON不会嵌套

    • 优化后,复合对象/循环嵌套对象

    const circular = {"b":true}
    circular.a = {a:circular,"b":1}
    
    var getObjectKeysResolveCircular = (target,ignored) => Object.keys(target)
        .reduce((curr,key)=>{
            "use strict";
            curr.matched.push(target);
            let result = curr.result.concat([key]);
            return {
                result:result
                    .concat((typeof target[key]==="object" 
                        //防止key重复
                        && curr.matched.indexOf(target[key])<0)?
                    getObjectKeysResolveCircular(target[key],curr.matched)
                    .filter(key=>result.indexOf(key)<0):[])
                ,matched:curr.matched.concat([key])
            }}
            ,{result:[],matched:Array.isArray(ignored)?ignored:[]})
            .result
            
    getObjectKeysResolveCircular(circular) //["a","b"]
    • MDN javascript Object

    • MDN javascript Array

    跟框架有什么关系???

    reply
    0
  • PHPz

    PHPz2017-04-10 17:02:47

    直接用for in不久可以了吗,这个跟这几个框架有什么关系

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 17:02:47

    Object.keys

    reply
    0
  • Cancelreply