【问题标题】:Add rows from CSV with duplicate values in javascript在 javascript 中添加具有重复值的 CSV 行
【发布时间】:2017-08-22 19:52:53
【问题描述】:

使用 Papaparse,我正在尝试将具有重复 SKU 的行加在一起。我试图在不添加另一个 JS 库(如 D3)的情况下做到这一点。 我的 CSV 看起来像这样:

SKU,Daily total,Weekly total
AAA111,2,10
BBB222,4,6
CCC333,11,19
AAA111,5,11
BBB222,6,12

我让它输出表中的所有行,但我需要将所有具有相同 SKU 编号的行动态添加在一起。

    <script>
        function datasetToMap(data) {
        var ret = {};
        $(data).each(function(index, row) {
            ret[row] = row;
        });
           
    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/testcsv.csv",
    success: function (data) {
        appendMapToTable(datasetToMap(Papa.parse(data).data));
    }
});

我试图让 AAA1111 在表中计数为 7 和 21,并使 BBB222 在表中计数为 10 和 18。

我在这里有一个工作示例:https://codepen.io/BIGREDBOOTS/pen/LjmojW

【问题讨论】:

    标签: javascript ajax csv


    【解决方案1】:

    这是一个 ES6 解决方案,它使用哈希来存储 SKU,并使用 reduce 操作来聚合天和周的总数:

    const data = `SKU,Daily total,Weekly total
    AAA111,2,10
    BBB222,4,6
    CCC333,11,19
    AAA111,5,11
    BBB222,6,12`
    
    // remove the header row and parse numbers
    const rows = data.split('\n').slice(1).map((row) => { 
       return row.split(',').map(i => !isNaN(Number(i)) ? Number(i) : i)
    })
    
    const aggregate = rows.reduce((p, row) => {
      let [sku, dayTotal, weekTotal] = row
      if (p[sku]) {
        let [_, prevDayTotal, prevWeekTotal] = p[sku]
        p[sku] = [sku, prevDayTotal + dayTotal, prevWeekTotal + weekTotal]
      } else {
        p[sku] = [sku, dayTotal, weekTotal]
      }
      return p
    }, {})
    
    console.log(aggregate)

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2014-09-02
      • 2012-07-05
      • 2016-08-02
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多