对象中的Javascript推送数组项

对象中的Javascript推送数组项,javascript,arrays,object,Javascript,Arrays,Object,关于在Javascript中创建对象,我有以下问题 当用户单击按钮时,我想将SNU板推送到阵列板。但每个序列号都按批次号分组 对象应该是这样的 var Object = { 'COFBP21018': { slabs: { 0: 18765, 1: 38947, ... } }, 'DEPOUS394O': { slabs: {

关于在Javascript中创建对象,我有以下问题

当用户单击按钮时,我想将SNU板推送到阵列板。但每个序列号都按批次号分组

对象应该是这样的

    var Object = {
    'COFBP21018': {
        slabs: {
            0: 18765,
            1: 38947,
            ...
        }
    },
    'DEPOUS394O': {
        slabs: {
            0: 11006276,
            1: 11020446,
                    ...

        }
    },
    ..
}
<a href=".." class="add_slab_to_array" data-batch_nr="COFBP21018" data-sn_slab="18765" />
<a href=".." class="add_slab_to_array" data-batch_nr="COFBP21018" data-sn_slab="38947" />
<a href=".." class="add_slab_to_array" data-batch_nr="DEPOUS394O" data-sn_slab="11006276" />
<a href=".." class="add_slab_to_array" data-batch_nr="DEPOUS394O" data-sn_slab="11020446" />

var block = {};
$('.add_slab_to_array').click(function(event) {
        event.preventDefault();

        var batch_nr = $( this ).attr('data-batch_nr');
        var sn_slab = $( this ).attr('data-sn_slab');

        // Create new object if batch_nr does not exists
        // ADD sn_slab to Array inside the Object with related batch_nr

      block[batch_nr] = {
           slabs: [],
           add: function(sn_slab) {
               this.slabs.push(sn_slab)
           }
       }

       block[batch_nr].add(sn_slab);

 });
我的html看起来像这样

    var Object = {
    'COFBP21018': {
        slabs: {
            0: 18765,
            1: 38947,
            ...
        }
    },
    'DEPOUS394O': {
        slabs: {
            0: 11006276,
            1: 11020446,
                    ...

        }
    },
    ..
}
<a href=".." class="add_slab_to_array" data-batch_nr="COFBP21018" data-sn_slab="18765" />
<a href=".." class="add_slab_to_array" data-batch_nr="COFBP21018" data-sn_slab="38947" />
<a href=".." class="add_slab_to_array" data-batch_nr="DEPOUS394O" data-sn_slab="11006276" />
<a href=".." class="add_slab_to_array" data-batch_nr="DEPOUS394O" data-sn_slab="11020446" />

var block = {};
$('.add_slab_to_array').click(function(event) {
        event.preventDefault();

        var batch_nr = $( this ).attr('data-batch_nr');
        var sn_slab = $( this ).attr('data-sn_slab');

        // Create new object if batch_nr does not exists
        // ADD sn_slab to Array inside the Object with related batch_nr

      block[batch_nr] = {
           slabs: [],
           add: function(sn_slab) {
               this.slabs.push(sn_slab)
           }
       }

       block[batch_nr].add(sn_slab);

 });

var block={};
$('.将板添加到阵列')。单击(函数(事件){
event.preventDefault();
var batch_nr=$(this.attr('data-batch_nr');
var sn_slab=$(this.attr('data-sn_slab');
//如果批次号不存在,则创建新对象
//将序列号板添加到具有相关批次号的对象内的数组中
块[批次编号]={
楼板:[],
添加:功能(SNU板){
此.板.推(SNU板)
}
}
块【批次号】。添加(序列号板坯);
});

上面的代码可以工作,但我的数组板始终被覆盖。

在我看来,您每次单击都在重新定义块对象。您应该在继续之前检查它是否已设置

block[batch_nr] = block[batch_nr] || {};

block[batch_nr].slabs = block[batch_nr].slabs || [];

block[batch_nr].add = block[batch_nr].add || function(sn_slab) {                         
            this.slabs.push(sn_slab);
           };
想想这个

     block[batch_nr] = {
       slabs: [],
       add: function(sn_slab) {
           if (block[batch_nr]) {
               block[batch_nr].slabs.push(sn_slab)
           }
       }
   }

锚不是自闭元素,你会发现你使用了相同的密钥,所以当你使用COBB21018两次时,它们会被覆盖。@ MARTYNZJC——在代码解析器的右边,我首先在JSON对象上观察,而不是上面提到的问题,它工作得很好-非常有洞察力的答案!我觉得没必要这么复杂。。。我认为您的诊断是正确的,但我认为OP的代码只需要初始保护条件,以防止
块[batch\u nr]
被重新初始化