浅谈js的键值对key和value

> 昨晚无意中看到类似下面结构的一段代码的取值问题,引起我的兴趣,花了点时间写了个demo给大家分享一下。。。

1   var obj = [
2     {"2011":{"name":"jyjin","age":20}},
3     {"2012":{"name":"jyjin","age":21}}
4   ];
5 
6   var obj1 = {
7     "2013":{"name":"jyjin","age":22},
8     "2014":{"name":"jyjin","age":23}
9   };

 


  >仔细观察上面的结构,大家会发现上面两种结构与传统的json或数组数据结构有一些区别,2011、2012、2013、2014这些键值对中“键”的地方也存储了数据,这种方式可能大大减小了文件的存储大小。所以我在取值的时候激动了一下,下面就来讨论一下它的取值方式。

  >#1.键值对理解技巧
  >无论上面的哪种数据结构,数组也好对象也罢,要分清键值对,我的技巧就是先找冒号。*冒号左边的是key,右边的是value,没有冒号默认key从0开始依次递增,显示值为value*。
  >那么不难理解

  

1 obj的 key value
2     0 {"2011":{"name":"jyjin","age":20}}
3     1 {"2012":{"name":"jyjin","age":21}}
4 
5 obj1的 key value
6     2013 {"name":"jyjin","age":22}
7     2014 {"name":"jyjin","age":23}

 

  >很清晰的发现obj的value再细分key和value就是obj1的key、value划分结构

  >#2.键值对的取值
       1.for-in--------------------------------
       for-in的正确理解方式是for(var key in obj),其中obj是js对象或数组,我用key是为了更加清晰明了指明,它迭代出来的是key值而不是value值。所以用for-in遍历数组          出来的值是数组下标,遍历js对象结果是对象属性名。

        

 1        for(var key in obj){
 2           console.log(key);
 3         }
 4       控制台输出:
 5         0
 6         1
 7 
 8       for(var key in obj1){
 9         console.log(key);
10       }
11       控制台输出:
12         2013
13         2014

 

     2.$.each()--------------------------------
        jQuery中$.each()方法是当之无愧的取键值对的好方法,可以理解成这样的代码$.each(obj,function(key,value){...}),obj可以是js对象或数组,key和value分别对应相      应名称值、键值。这里一个很不好的习惯是书写成function(i,data)这里容易错误理解成i代表数组下标,data元素值,其实这种理解是完全错误的!

  

 1       $.each(obj,function(key,value){
 2         console.log(key+":"+value);
 3       });
 4       控制台输出:
 5         0:[object Object] 
 6         1:[object Object]
 7 
 8     
 9 
10       $.each(obj1,function(key,value){
11         console.log(key+":"+value);
12       });
13       控制台输出:
14         2013:[object Object] 
15         2014:[object Object]
16   
17 
18       可以看出这里不单单取出for-in可以取出的key,也将value取出了,只不过需要进一步对value的键值对取值。。。
19 
20      3.用for-in和$-each混合使用取出obj中的重要数据信息:年份、姓名、年龄
21       
22 
23       $.each(obj,function(objkey,objvalue){
24         $.each(objvalue,function(key,value){
25           console.log(key+":"+value.name+":"+value.age);
26         });
27       });
28       $.each(obj1,function(key,value){
29         console.log(key+":"+value.name+":"+value.age);
30       });
31 
32       控制台输出:
33         2011:jyjin:20 
34         2012:jyjin:21 
35         2013:jyjin:22 
36         2014:jyjin:23

  

 1        for(var objkey in obj){
 2         $.each(obj[objkey],function(key,value){
 3           console.log(key+":"+value.name+":"+value.age);
 4         });
 5       }
 6       for(var obj1key in obj1){
 7         console.log(obj1key)
 8         $.each(obj1[obj1key],function(key,value){
 9           console.log(":"+value);
10         });
11       }
12 
13       控制台输出:
14         2011:jyjin:20 
15         2012:jyjin:21 
16         2013
17         :jyjin 
18         :22 
19         2014
20         :jyjin 
21         :23

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值