前端的数据获取&&对象数据&&数组

158 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情

今天之前的我负责的模块又双叒叕出了个问题......不过问题也很快锁定,就是因为昨天突发问题后,我改了下代码,改了没改全,只改了某一块地方,另一块涉及到相关的,没改过来,就没有应用成功。前后端都是的,当时因为某个地方去改了代码,一心想着实现那个功能,把一些变量类型都改掉了,然后另一个地方在引用该变量时,就没引用好,导致之前能正常使用的功能崩了(前端变量类型变量代码也没编译报错,所以第一时间也没发现)。不过还好问题解决了,还有个别地方是展示优化......改前端代码过程中,对于一些对象、数组的数据接收有一些收获,整理一下......

对象数据的获取

"data":{ 
        "name": "陈冠希",
        "age": "46",
        "gender": "男"
    }

如上例,如果后端返回给前端的数据是这样的,那么在前端代码中如果想要获取该对象中的指定数据,可以这么些:

    //获取全部 key,即,"name","age","gender"
    Object.keys(data);
    //需要注意的是,这种方法获得的 key,会以数组的形式返回,即,["name","age","gender"]
    
    //获取全部 value,即,"陈冠希","46","男"
    Object.values(data);
    //需要注意的是,这种方法获得的 values,会以数组的形式返回,即,["陈冠希","46","男"]

数组内数据的获取

    "arr":["吴彦祖","彭于晏","胡歌"]

如果后端返回给前端的是一个数据,则在前端中如果想要遍历这个数组,可以如下这样写:

    arr.forEach(item => {
        console.log(item);
    })

结果:
    吴彦祖
    彭于晏
    胡歌

对象中包含数组/数组中包含对象

以上是比较基础、比较简单的情况,真正开发中,返回的数据可能会复杂一点,两者之间互相包含,但无论怎么包含,拆解开来看,还是对象的获取、数组的遍历......

案例1

    "data":{
        "陈冠希":["cgx","46","男"],
        "吴彦祖":["wyz","47","男"],
        "彭于晏":["pyy","33","男"]
    }

像上面这种,如果想要获取各种数据,看着比较麻烦,但拆开来看,其实最基本的还是对象的获取、数组的遍历:

    //获取 "33"
    
    //拆开来看
    //首先先获取到所有的 values
    Object.values(data);
    //结果  [["cgx","46","男"],["wyz","47","男"],["pyy","33","男"]]
    
    //可以看到,"33" 在下标为 2 的子数组中下标为 1 的位置
    
    //综上,获取 "33" 可以直接写成
    Object.values(data)[2][1];

案例2

    "data":{
        "cgx":[
            {
                "age": "46", 
                "symbol":["photo","clot","singer"]
            }
        ],
        "wyz":[
            {
                "age","47","symbol":["model","actor"]
            }
        ],
        "pyy":[
            {
                "age":"33","symbol":["actor","athlete"]
            }
        ]
    }

像上面这个就又复杂了一点,但还是那句话,拆开看:

    //获取 "cgx" 的所有 symbol
    
    //可以先获取所有的 values
    let arr = Object.values(data)  
    //结果  [[{"age": "46", "symbol":["photo","clot","singer"]}], [{"age","47","symbol":["model","actor"]}], [{"age":"33","symbol":["actor","athlete"]}]]
    
    //其中,arr[0] 就是  [{"age": "46", "symbol":["photo","clot","singer"]}]
    
    //再获取所有 values
    Object.values(arr[0])
    //结果  ["46", ["photo","clot","singer"]]
    
    //其中 下表为 1 的就是 symbol 对应的数组的内容,可以遍历输出
    Object.values(arr[0])[1].forEach(item => {
        console.log(item);
    })
    

结果:
    photo
    clot
    singer

怎么写着写着,感觉,好像也不会碰到这种情况.....不过最后这种情况,我确实遇到了,而且就是我自己后端返回的数据,就是长这样......怎么说呢,万一碰到呢,是吧,多会一点知识不是坏事 :)
希望本文能够帮到你,如有错误,望指正!
我向你敬礼啊,Salute!