迭代表

时间:2017-08-30 06:45:22

标签: javascript jquery

我正在迭代包含表格的动态生成的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);
  });

请让我知道我在做什么错误?

2 个答案:

答案 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;
  });

注意:我没有测试代码,因为缺少标记。