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