我正在迭代包含表格的动态生成的div。虽然我在迭代行,但假设我有两行,我得到两个结果。但问题是结果都包含表格最后一行的值。这是我的代码:
$(this)
.children('.js-charge-data')
.children('.js-charging-line-wrapper')
.find('.js-chargeline-tbody')
.children('tr')
.each(function() {
chargingLineJSON['chargingType'] = 'IoT';
chargingLineJSON['chargeCategoryName'] = $(this).find('.js-charging-category').val().trim();
chargingLineJSON['subCategoryName'] = $(this).find('.js-charging-sub-category').val().trim();
chargingLineJSON['backEndProductName'] = $(this).find('.js-charging-sub-category').children(':selected').data('backend_product_name');
chargingLineJSON['shipToAddressId'] = '123';
chargingLineJSON['chargePerUnit'] = $(this).find('.js-unit-charge').val().trim();
chargeLineListJSON['chargingLine'] = chargingLineJSON;
chargingLineJSONArray.push(chargeLineListJSON);
});
请让我知道我在做什么错误?
答案 0 :(得分:2)
您正在将同一个对象chargingLineJSON
推送到数组,在.each()
块中创建一个新对象
.each(function () {
//Create a new object
var chargingLineJSON = {};
//Your code
chargingLineJSONArray.push(chargeLineListJSON);
});
根据@Rajesh评论
使用引用复制对象。因此,在第二次迭代中,当您将value设置为object的属性时,您将覆盖内存位置的值而不是locat变量。因此,相同的值
答案 1 :(得分:1)
在According to the manual' @Satpal中评论和记入,问题是由于对象被复制为参考。
虽然我的答案中没有重复评论,但是为了减少重复数据。
你可以使用这样的东西。
$(this)
.find('.js-charge-data .js-charging-line-wrapper .js-chargeline-tbody tr')
.each(function() {
let category = $(this).find('.js-charging-category');
let subCategory = $(this).find('.js-charging-sub-category');
let selectedSubCategory = $(this).find('.js-charging-sub-category :selected');
let unitCharge = $(this).find('.js-unit-charge');
chargingLineJSONArray.push({
chargingType: 'IoT',
shipToAddressId: '123'
chargeCategoryName: category.val().trim(),
subCategoryName: subCategory.val().trim(),
backEndProductName: selectedSubCategory.data('backend_product_name'),
chargePerUnit: unitCharge.val().trim()
});
// Not sure what this line is about?
// You are saving reference to self in a property.
// chargeLineListJSON['chargingLine'] = chargingLineJSON;
});
注意:我没有测试代码,因为缺少标记。