jquery Json对象数组,以整数值为键

时间:2018-02-28 09:17:33

标签: jquery

我希望得到像

这样的格式
[{"1":"6"},{"1":"7"},{"2":"8"}] ) 

但是这段代码显示如下:

[{"cateid":"6"},{"cateid":"7"},{"cateid":"8"}] ) 

如何用整数值替换cateid

var seleusrv = [];

$('.catechk:checked').each(function(){
    var cateid = $(this).val();
    var i = 0;

    $('.srvchk:checked').each(function(){
        var srvcateid = $(this).data('cateid');
        var srvid = $(this).val();
        if (cateid == srvcateid) {
            seleusrv.push({cateid: srvid});
        }
    });

    if ($(this).closest('ul').find('.srvchk:checked').length == 0) {
        seleusrv.push({cateid: ''});
    }
});
seleusrv = JSON.stringify(seleusrv);

这是我的Html结构: -

<ul>
    <li>
        <input class="catechk collapse_allcheckbox" value="1" type="checkbox"> &nbsp; Air Conditioner
    </li>
    <li>
        <input class="srvchk collapse_checkbox" value="6" data-cateid="1" type="checkbox"> &nbsp; AC Repair
    </li>
    <li>
        <input class="srvchk collapse_checkbox" value="7" data-cateid="1" type="checkbox"> &nbsp; AC Gas Filling
    </li>
</ul>

This is my Architecture

2 个答案:

答案 0 :(得分:1)

您需要修改您的逻辑,如下所示: -

查看以下工作片段: -

$(document).ready(function(){
  var seleusrv = [];
  $('.catechk').each(function(){
    var obj = $(this);
    var cateid = $(this).val();
    if (obj.closest('ul').find('.srvchk:checked').length == 0) {
        var temp = {};
        temp[cateid] = '';
        seleusrv.push(temp);
    }else{
      obj.closest('ul').find('.srvchk:checked').each(function(){
        var temp = {};
        var catvalue = $(this).val();
        temp[cateid] = catvalue;
        seleusrv.push(temp);
      });
    }
  });
  seleusrv = JSON.stringify(seleusrv);
  console.log(seleusrv);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
    <li>
        <input class="catechk collapse_allcheckbox" value="1" type="checkbox" checked> &nbsp; Air Conditioner
    </li>
    <li>
        <input class="srvchk collapse_checkbox" value="6" data-cateid="1" type="checkbox" checked> &nbsp; AC Repair
    </li>
    <li>
        <input class="srvchk collapse_checkbox" value="7" data-cateid="1" type="checkbox" checked> &nbsp; AC Gas Filling
    </li>
</ul>
<ul>
    <li>
        <input class="catechk collapse_allcheckbox" value="2" type="checkbox" checked> &nbsp; Air Conditioner2
    </li>
    <li>
        <input class="srvchk collapse_checkbox" value="8" data-cateid="1" type="checkbox"> &nbsp; AC Repair2
    </li>
    <li>
        <input class="srvchk collapse_checkbox" value="9" data-cateid="1" type="checkbox"> &nbsp; AC Gas Filling2
    </li>
</ul>

答案 1 :(得分:0)

如果您能够在程序中使用ES6,以下情况应该可以正常使用:

seleusrv.push({[cateid]: ''});

有关规范的详细信息,请参阅this section。否则,您必须创建一个临时对象,然后将其推送:

var temp = {};
temp[cateid] = '';
seleusrv.push(temp);