使用javascript/jquery动态地在html表格中添加csv中的值

使用javascript/jquery动态地在html表格中添加csv中的值

问题描述:

我有一个动态生成的CSV文件来自另一个供应商,我需要在我的网站上显示一个表格。问题是我需要能够处理CSV中的数据,以便它可以在html表中显示更正的值。最后,我需要HTML表格来显示产品,而不是混合集合。使用javascript/jquery动态地在html表格中添加csv中的值

我正在使用jquery和papaparse库来获取数据并将其解析为html中的表格。我codepen是在这里:

https://codepen.io/BIGREDBOOTS/pen/YQojww

JavaScript的拉动初始CSV数据并显示在一个表中,但我无法弄清楚如何一起添加值。如果有更好的方法来解决这个问题,比如将CSV转换为JSON等其他形式的数据,那也没关系。

我的CSV看起来是这样的:

product_title,product_sku,net_quantity 
Product 1,PRD1,10 
Product 2,PRD2,20 
Product 3,PRD3,30 
Mixed Set 1,MIX1,100 
Mixed Set 2,MIX2,50 
Mixed Set 3,MIX3,75 

我使用的JavaScript是:

function arrayToTable(tableData) { 
 
     var table = $('<table></table>'); 
 
     $(tableData).each(function (i, rowData) { 
 
      var row = $('<tr class="rownum-' + [i] + '"></tr>'); 
 
      $(rowData).each(function (j, cellData) { 
 
       row.append($('<td class="' + [i] + '">'+cellData+'</td>')); 
 
      }); 
 
      table.append(row); 
 
     }); 
 
     return table; 
 
    } 
 

 
    $.ajax({ 
 
     type: "GET", 
 
     url: "https://cdn.shopify.com/s/files/1/0453/8489/t/26/assets/sample.csv", 
 
     success: function (data) { 
 
      $('body').append(arrayToTable(Papa.parse(data).data)); 
 
     } 
 
    });

我对混合组规则:

  • 混合组1应添加100到产品1和产品2.
  • 混合组2应该添加50到产品2和产品3.
  • 混合组3应该添加75到产品1,产品2和产品3.

我想结束只是产品输出,并将正确的数字添加到公式。 最终结果将为产品1 = 185,产品2 = 245产品3 = 155

虽然如果*THEAD元素处于“th”状态会更好,但如果这太复杂了,那很好。

<table> 
    <tbody> 
     <tr class="rownum-0"> 
      <td class="0">product_title</td> 
      <td class="0">product_sku</td> 
      <td class="0">net_quantity</td> 
     </tr> 
     <tr class="rownum-1"> 
      <td class="1">Product 1</td> 
      <td class="1">PRD1</td> 
      <td class="1">185</td> 
     </tr> 
     <tr class="rownum-2"> 
      <td class="2">Product 2</td> 
      <td class="2">PRD2</td> 
      <td class="2">245</td> 
     </tr> 
     <tr class="rownum-3"> 
      <td class="3">Product 3</td> 
      <td class="3">PRD3</td> 
      <td class="3">155</td> 
     </tr> 
    </tbody> 
</table> 

不知道你正在使用的数据集的大小,我建议你通过所有的CSV数据集的第一个迭代,以填充产品具有正确值的列表,然后在一遍重复,以填充您的HTML表格:

function datasetToMap(data) { 
    var ret = {}; 
    //Initialize a map with all the product rows 
    $(data).each(function(index, row) { 
     if(row[0].startsWith("Product")) { 
      ret[row[1]] = row; //Using the SKU as the key to the map 
     } 
    }); 

    //Apply your mixed sets rules to the elements in the ret array   
    $(data).each(function(index, row) { 
     if(row[1] === "MIX1") { 
      ret["PRD1"][2] += 100; 
      ret["PRD2"][2] += 100; 
     } 
     //Do the same for Mixed sets 2 and 3 
    }); 
    return ret; 
} 

function appendMapToTable(map) { 
    var $table = $('#my-table'); 
    Object.keys(map).forEach(function(key, i) { 
     var rowData = map[key]; 
     var row = $('<tr class="rownum-' + [i] + '"></tr>'); 
     $(rowData).each(function (j, cellData) { 
      row.append($('<td class="' + [j] + '">'+cellData+'</td>')); 
     }); 
     $table.append(row); 
    }); 
} 

$.ajax({ 
    type: "GET", 
    url: "https://cdn.shopify.com/s/files/1/0453/8489/t/26/assets/sample.csv", 
    success: function (data) { 
     appendMapToTable(datasetToMap(Papa.parse(data).data)); 
    } 
}); 

请注意,此愿与ID my-table表在你的HTML已经存在:你可以手工解析您CSV数据的第一行添加表格标题。

还要注意的是,如果你的CSV数据集非常大这绝对不是最佳的解决方案,因为它需要迭代通过其所有行两次,然后再迭代通过与计算值建立的所有名单。

+0

我将.startswith注释掉了,因为它给出了一个错误,但我仍然只是在html中得到[object object]输出。 https://开头codepen。io/BIGREDBOOTS/pen/gebzob –

+0

而我的数据集少于200行,所以它应该仍然足够小以重复执行两次 –

+0

我的答案中存在拼写错误,我对其进行了修正。另外,我重新实现了地图迭代,现在我在我的codepen中看到一个合适的表:https://codepen.io/anon/pen/awedEp – Raibaz