当前位置: 首页 > 知识库问答 >
问题:

在jquery中将所有相似的id分组为一

谢昂雄
2023-03-14

我用Jquery创建了一个动态表单,会有多个选择框和文本框,我如何根据用户名将数据分组为一个。 例如,将有多个选择框=lim,总计=20,我如何将这个2分组到数组中作为1。

点击保存按钮,最终数据如下图

array(
  'lim' => 40,
  'tan' => 10,
);

此处代码:https://jsfiddle.net/7GBVFJDC/

共有2个答案

长孙阳泽
2023-03-14

您可以在body tr上使用reduce来提取数据,并以所需的对象格式对其进行求和。 像这样:

const result = $('tbody tr').get().reduce((prev, ne) => {
  const $this = $(ne);
  const type = $this.find('select').val();
  prev[type] += parseInt($this.find('input').val())
  return prev;
}, {
  lim: 0,
  tan: 0
});

null

var i = 0;
$('.addRow').on('click', function() {
  addRow();
  /*             
    $('.select2').select2({
        theme: 'bootstrap4',
        ajax: {
            url: '{{ route("getMember") }}',
            dataType: 'json',
        },
    }); */
});

function addRow() {
  i++;
  var tr = '<tr id="row_' + i + '"><td>';
  tr += '<select class="form-control select2" id="name1_' + i + ' first" name="name[]">';
  tr += '<option>tan</option><option>lim</option></select></td>';
  tr += '<td><input type="number" name="winlose[]" id="amt1_' + i + '" class="form-control"></td>';
  /*  tr  += '<td><select class="form-control select2" id="name2_'+i+'" name="name2[]">';
   tr  += '<option>tan</option><option>lim</option></select></td>';    
   tr  += '<td><input type="number" name="winlose[]" id="amt2_'+i+'" class="form-control"></td>'; */
  tr += '<td style="text-align:center"><a href="#" class="btn btn-danger remove">-</a>';
  tr += '</td></tr>';
  $('tbody').append(tr);
}

$('tbody').on('click', '.remove', function() {
  $(this).parent().parent().remove();
});

$('button').on('click', () => {
  const result = $('tbody tr').get().reduce((prev, ne) => {
    const $this = $(ne);
    const type = $this.find('select').val();
    prev[type] += parseInt($this.find('input').val())
    return prev;
  }, {
    lim: 0,
    tan: 0
  });

  console.log(result)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table table-bordered">
  <thead>
    <tr class="text-center">
      <th>name</th>
      <th>amount</th>
      <th>Second name</th>
      <th>Second amount</th>
      <th style="text-align:center"><a href="#" class="btn btn-info addRow">+</a></th>
    </tr>
  </thead>
  <tbody class="text-center">

  </tbody>
</table>
<button>
  save
</button>
惠泳
2023-03-14

你是说这样的事?

保存按钮事件侦听器应具有以下代码

$('.savebtn').on('click', function() {
  var mapObj = {};
  $('.listable .cb').each(function(index, item) {
    var selectVal = $(this).find('select').val();

    if (mapObj[selectVal]) {
      mapObj[selectVal] += Number($(this).find('#amt1_' + index).val());
    } else {
      mapObj[selectVal] = Number($(this).find('#amt1_' + index).val());
    }

  });

  console.log(mapObj);
});

null

var i = 0;
$('.addRow').on('click', function() {
  addRow();

});

function addRow() {

  var tr = '<tr class="cb" id="row_' + i + '"><td>';
  tr += '<select class="form-control select2" id="name1_' + i + ' first" name="name[]">';
  tr += '<option>tan</option><option>lim</option></select></td>';
  tr += '<td><input type="number" name="winlose[]" id="amt1_' + i + '" class="form-control"></td>';

  tr += '<td style="text-align:center"><a href="#" class="btn btn-danger remove">-</a>';
  tr += '</td></tr>';
  i++;
  $('tbody').append(tr);

}

$('tbody').on('click', '.remove', function() {
  $(this).parent().parent().remove();
});

$('.savebtn').on('click', function() {
  var mapObj = {};
  $('.listable .cb').each(function(index, item) {
    var selectVal = $(this).find('select').val();

    if (mapObj[selectVal]) {
      mapObj[selectVal] += Number($(this).find('#amt1_' + index).val());
    } else {
      mapObj[selectVal] = Number($(this).find('#amt1_' + index).val());
    }

  });

  console.log(mapObj);
});
<table class="table table-bordered listable">
  <thead>
    <tr class="text-center">
      <th>name</th>
      <th>amount</th>

      <th style="text-align:center"><a href="#" class="btn btn-info addRow">+</a></th>
    </tr>
  </thead>
  <tbody class="text-center">

  </tbody>
</table>
<button type="button" class="btn btn-primary savebtn">Save</button>
 类似资料:
  • 问题内容: 我不知道如何很好地解释这一点,所以请多多包涵。 我试图对彼此相邻的相似行进行分组,如果相同,则基本上忽略第n + 1行。我不确定这在MySQL中是否容易实现。这些行除描述外不共享其他任何属性。如果还有其他不重复的“描述”,我仍然希望将它们返回。 我有一张桌子,上面满是这样的条目: 问题答案: 您可以使用巧妙的技巧来做到这一点。诀窍是计算与特定id 不同 的描述的数量。对于序列中的值,此

  • 问题内容: 我有这样一个浮点数组: 现在,我想像这样对数组进行分区: // [200]由于集群支持较少,将被视为异常值 我必须为多个数组找到这种段,但我不知道分区大小应该是多少。我试图通过使用层次聚类(聚集)来做到这一点 ,它为我提供了令人满意的结果。但是,问题是,建议我不要对一维问题使用聚类算法,因为这样做没有任何理论上的依据(因为它们是针对多维数据的)。 我发现了另一个建议,而不是聚类,即自然

  • 问题内容: 我是jQuery新手。我有以下代码: 它仅适用于带有的第一个,不适用于其他。如何将其应用于具有相同ID的所有元素? HTML: 问题答案: 元素的ID在中应该是唯一的。两个或多个元素具有相同的ID无效html。要在各个元素之间共享功能,请给它们分配一个公共类,而不要给它们相同的ID。如果您不能为它们分配一个通用类,则下面的解决方法将使您可以选择具有相同id属性的元素: 使用相同的ID

  • 本文向大家介绍在MongoDB中将数组项分组并获得具有相似价格的产品计数?,包括了在MongoDB中将数组项分组并获得具有相似价格的产品计数?的使用技巧和注意事项,需要的朋友参考一下 要对数组项进行分组,请使用$ group和$ sort。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是对数组项进行分组的查询- 这将产生以下输出-

  • 问题内容: 我有一张表,上面有一些植物的记录。植物可以具有多个名称,该表将其显示为不同的记录。该表称为new_plantsname 这继续超过3000条记录 我想要的是将具有相同Plantid的记录组合在一起,并在不同的列中显示不同的名称: 等等 我也想将结果保存到新表中 问题答案: 基本上,这是一个(您未指定RDBMS)我假设MySQL并且它没有函数,因此您将需要使用带有语句的聚合函数来复制它。

  • 问题内容: 说我有一个列表L。如何获得K组所有分区上的迭代器? 示例:L = [2,3,5,7,11,13],K = 3 3组的所有可能分区的列表: ===更新=== 我正在研究一个似乎可行的解决方案,所以我只复制粘贴它即可 输出: 问题答案: 这可行,尽管它可能超级无效(我将它们全部排序以避免重复计算): 它还返回空簇,因此您可能希望将其包装起来以便仅获取非空簇: 计数只是为了检查: 有用 !

  • 我正在browserstack上运行量角器测试,并注意到我运行的测试被标记为单独的条目。我想将它们全部分组到一个单独的构建中。我已经在量角器配置文件中添加了功能。但似乎于事无补。正在附加量角器配置字段。感谢你的帮助。 谢谢 然而,当我运行测试时,我注意到测试被附加了。例如,如果我运行5个测试,我只能看到在BrowserStack中执行的最后一个测试。我该怎么解决这个?