如何基于对象键追加

时间:2017-10-26 08:14:04

标签: javascript jquery

我有一个这样的对象:

Object 
    section : array (1)
    0 : {id : 1, name: 'foo'}

    unit : array(2)
    0 : {id : 1, name: 'bar'}
    1 : {id : 2, name: 'bar2'}

但如何检测对象是否有节键? 我的代码是这样的:

$.each(data, function(key,row){
     if (row.section) {
         $.each(row.section, function(key, val){
             $('.select-section').append("<option value='"+val.id+"'>"+val.name+"</option>");
         });
     }else{
         $('.select-section').html("<option value='-'>-</option>");
     }
});

但是当我有一个像上面那样的对象时,结果就是用section option value条件替换else条件( - )

我创建了这个,因为有时候一个对象没有分区键,所以我在section键不可用时创建一个默认选项

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

你可以这样做:

pos

plnkr:http://embed.plnkr.co/dxzbHir4x0RjQwQAfse1/

答案 1 :(得分:0)

我在 JS 代码中更改了两件事:

  1. if (key=="section")代替if (row.section)检查key是否section;
  2. $('.select-section').append而不是$('.select-section').html因为您可以添加的html()函数会将select标记内的整个html替换为<option value='-'>-</option>,然后您&# 39;然后再没有其他选择。
  3. 请查看此演示以便更好地理解:

    &#13;
    &#13;
    var object={
        section : {
        0 : {id : 1, name: 'foo'}
        },
    
        unit : {
        0 : {id : 1, name: 'bar'},
        1 : {id : 2, name: 'bar2'}
        }
        };
        
        $.each(object, function(key,row){
     
         if (key=="section") {
             $.each(row, function(key, val){
             var opt="<option value='"+val.id+"'>"+val.name+"</option>";
                 $(".select-section").append(opt);
             });
         }else{
             $('.select-section').append("<option value='-'>-</option>");
         }
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select class="select-section"></select>
    &#13;
    &#13;
    &#13;

    此解决方案仍然不完美,因为我相信如果您有另一个key不是section,则上面的代码会在-附加一个选择标记;

    &#13;
    &#13;
    var object={
        section : {
        0 : {id : 1, name: 'foo'}
        },
    
        unit : {
        0 : {id : 1, name: 'bar'},
        1 : {id : 2, name: 'bar2'}
        },
         unit2 : {
        0 : {id : 1, name: 'bar'},
        1 : {id : 2, name: 'bar2'}
        }
        };
        
        $.each(object, function(key,row){
     
         if (key=="section") {
             $.each(row, function(key, val){
             var opt="<option value='"+val.id+"'>"+val.name+"</option>";
                 $(".select-section").append(opt);
             });
         }else{
             $('.select-section').append("<option value='-'>-</option>");
         }
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select class="select-section"></select>
    &#13;
    &#13;
    &#13;

    因此,我建议您在开头添加select标记,然后无需检查key是否不是section。这是另一个更好的演示:

    &#13;
    &#13;
    var object={
        section : {
        0 : {id : 1, name: 'foo'}
        },
    
        unit : {
        0 : {id : 1, name: 'bar'},
        1 : {id : 2, name: 'bar2'}
        },
         unit2 : {
        0 : {id : 1, name: 'bar'},
        1 : {id : 2, name: 'bar2'}
        }
        
        };
         $('.select-section').append("<option value='-'>-</option>");//APPEND It HERE
        $.each(object, function(key,row){
     
         if (key=="section") {
             $.each(row, function(key, val){
             var opt="<option value='"+val.id+"'>"+val.name+"</option>";
                 $(".select-section").append(opt);
             });
         }//NO NEED TO CHECK If It's NOT "SECTION"
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select class="select-section"></select>
    &#13;
    &#13;
    &#13;