javascript之遍历数组对象

1.处理json串:
    var obj = { 'one':1, 'two':2, 'three':3};
    第一:获取value值                                   注意:有一种特殊情况如果 名为数字类似1,2等
     var s="",k=[];                                           obj.就不适合了 可用obj["1"] 代替
    $.each(obj,function(key,val){
           s+=val+',';
           k.push(val);
    });    
    结果:s为字符串"1,2,3" k为数组[1,2,3]
    第二:获取key值
     $.each(obj,function(key,val){
                      s+=key+',';
                      k.push(key);
     });
2.处理数组    
var arr = [ "one", "two", "three", "four"];   
var arr = [ { 'one':1, 'two':2, 'three':3}, { 'one':4, 'two':5, 'three':6}, { 'one':7, 'two':8, 'three':9}, { 'one':10, 'two':11, 'three':12}];
   var s="",k=[];
      $.each(arr,function(i,val){
          s+=val.one+',';
          k.push(val.one);
      });
alert(s); 1,4,7,10
console.log(k);    
    选取多个 样式类似的东西
    $().each,对于这个方法,在dom处理上面用的较多
       $(“input[name=’ch’]”).each(function(i){
       if($(this).attr(‘checked’)==true){
      }

 

第一:{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数。
                                    var LangShen = {"Name":"Langshen","AGE":"28"};   
        访问格式(两种):     第一种:LangShen.Name LangShen.AGE,
                               第二种:LangShen["Name"] LangShen["AGE"]
该写法,在JSON数据结构中经常用。
JS对象常用的第一种情况:   
例如: 姓名    性别    年龄
       小明     男      20
       小虎     男      22
       小花     女      21   

要求 男女分为 两类
       [{男},{女}]
       
    var data=[{'name':'小明','sex':'boy','age':20},{'name':'小虎','sex':'boy','age':22},{'name':'小花','sex':'girl','age':21}]   
    var person={};
    for(var i=0;i<data.length;i++){
       var obj=data[i];
       if(!person[obj.sex]){
          person[obj.sex]=[];
       }
       person[obj.sex].push(obj);
    }
    console.log(person);对象里面放着两个数组(一男,一女)
    Object { boy: Array[2], girl: Array[1] }
    console.log(person.boy);性别为男的 数组
    Array [ Object, Object ]
        for(var j=0;j<person.boy.length;j++){
            var k=person.boy[j];
            alert(k.name+":"+k.sex+":"+k.age);
        }
如果没有boy创建一个
如果没有girl船建一个
如果有 判断是boy 还是girl 分别转入不同容器

JS对象常用的第二种情况:
     var data=[
     {'year':'2015','month':'2','type':'大号','total':2},
     {'year':'2015','month':'2','type':'大号','total':7},
     {'year':'2015','month':'6','type':'大号','total':3},
     {'year':'2016','month':'5','type':'小号','total':4},
     {'year':'2016','month':'5','type':'小号','total':5},
     {'year':'2016','month':'5','type':'小号','total':2},
     {'year':'2016','month':'6','type':'中号','total':8},
    ]
     整体思路  找出最小日期 找出最大日期
必须一: 定义数组:  承装结果 var result=[];遍历数组 var index=0;(必不可少)
必须二: 定义 (所需要的格式)r
    
必须三: 确定循环条件:     小于最大日期: 注意:小于最大 条件一:年小于最大日期的年 或者
                                                          条件二:年相等月小于最大日期的月            
必须四: 当满足什么条件的时候data中的值赋予r (怎么给)

遍历数组 循环给值

    while(curYear < endyear || (curYear == endyear && curMonth <= endmonth)){
            var r = {'year': curYear, 'month':curMonth, 'types':{},'total': 0};
                if(index < data.length && r.year == data[index].year && r.month == data[index].month){
                    r.total += data[index].total;
                    r.types[data[index].type + ''] = data[index].total;
                    index++;
                }
                else{
                    break;
                }
            rpts.push(r);
            curMonth++;
            if(curMonth > 12){
                curYear++;
                curMonth = 1;
            }
        }

         while(index<data.length)此条件比不可少
         如果data[i].year=r.year并且data[i].month=r.month 那么type total赋值过去 month+1
注意:此处出现逻辑错误!!!!!
         如果有年月都相等的则month就加1
         如果此条记录的下一条记录也是 相同的年月则会出现错误
      出现错误的原因:看上面的代码 只要数据库中出现 2015年2月那么month就会+1
                                   下一条数据是:2015年2月 然而他要对比的是2015年3月if()语句就再也进不去了       

                   2015             2
     var r={'year':curYear, 'month':curMonth,'type':type{},'total':0}
    
         
做成以下样式
     year  month  小号   中号   大号   total
     输入框中的 日期 dtstart  数据库中的日期 data[]
               以month作为比较 month++
               如果month>12
                   year++
         并且初始化月 month=1;
     var dtstart = $('#dtStart').datebox('getValue');
     var result={'year':curMonth,'month':curMonth,type{'大号':a,'中号':b,'小号':c,},'total':a+b+c};
    
     如:result.type["大号"]=
     如:result.type["中号"]=
     如:result.type["小号"]=
     if(r == null || r.year != data[i].year || (r.year == data[i].year && r.quarter != quarter)){
                r = {'year': data[i].year,'quarter':quarter, 'types':{"1":0,"2":0},'total': data[i].total};
                if(data[i].types["1"]!=null){
                   //对象取值 可以是. 也可以是[属性名]
                    r.types["1"] =data[i].types["1"];
                }
                if(data[i].types["2"]!=null){
                    r.types["2"] =data[i].types["2"];    
                }
                rpts.push(r);
            }
            else{
                r.total += data[i].total;
                if(data[i].types["1"]!=null){
                    r.types["1"] +=data[i].types["1"];
                }
                if(data[i].types["2"]!=null){
                    r.types["2"] +=data[i].types["2"];    
                }
                
            }
    



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值