2D 数组查询 - 尽管使用了 join(),但输出中出现意外逗号;

Posted

技术标签:

【中文标题】2D 数组查询 - 尽管使用了 join(),但输出中出现意外逗号;【英文标题】:2D Array Query - unexpected commas in output despite using join(); 【发布时间】:2020-08-14 19:46:46 【问题描述】:

我正在尽我所能学习 jQuery,但我有点卡住了。我正在尝试在表格中创建一个二维表单数据数组,它似乎可以工作,但是当我尝试获取值时,我会返回逗号,即使我使用 join()。

我想知道我是否做错了什么。我正在使用按钮事件来触发警报,以使用 join() 显示值。

这是 html

<table class="table order-list">
  <thead>
    <td>A</td>
    <td>B</td>
    <td>C</td>
  </thead>
  <tbody>
 <tr data-key="1">
    <td> <input type="text" class="pull-right form-control" name="" value="D"></td>
     <td> <input type="text" class="pull-right form-control" name="" value="E"></td>
        <td> <input type="text" class="pull-right form-control" name="" value="F"></td>
  </tr>

   <tr data-key="2">
    <td> <input type="text" class="pull-right form-control" name="" value="H"></td>
     <td> <input type="text" class="pull-right form-control" name="" value="I"></td>
        <td> <input type="text" class="pull-right form-control" name="" value="J"></td>

    </tr>


       <tr data-key="2">
    <td> <input type="text" class="pull-right form-control" name="" value="K"></td>
     <td> <input type="text" class="pull-right form-control" name="" value="L"></td>
        <td> <input type="text" class="pull-right form-control" name="" value="M"></td>
  </tr>
  </tbody>

</table>

<button id="btn1" style="width:100px, height:100px">Click</button>

这里是 jquery/javascript:

$("#btn1").click(function()

  var tableData = $('tr').map(function() 
  return [$(this).find(':input').map(function() 
    return $(this).val()
  ).get()]
  ).get()

  alert(tableData.join(""));

console.log(tableData)  
); 

这是我上面的输出:D,E,FH,I,JK,L,M

【问题讨论】:

【参考方案1】:

假设您的目标是删除 all 输出字符串中的逗号,那么您还需要 join() 内部数组。另请注意,您可以使用箭头函数使代码更简洁。试试这个:

$("#btn1").click(function() 
  var tableData = $('tr').map((_, tr) => [
    $(tr).find(':input').map((_, inp) => inp.value).get().join('')
  ]).get();
  console.log(tableData.join(''));
);
#btn1  width: 100px; height: 100px; 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table order-list">
  <thead>
    <td>A</td>
    <td>B</td>
    <td>C</td>
  </thead>
  <tbody>
    <tr data-key="1">
      <td><input type="text" class="pull-right form-control" name="" value="D"></td>
      <td><input type="text" class="pull-right form-control" name="" value="E"></td>
      <td><input type="text" class="pull-right form-control" name="" value="F"></td>
    </tr>
    <tr data-key="2">
      <td><input type="text" class="pull-right form-control" name="" value="H"></td>
      <td><input type="text" class="pull-right form-control" name="" value="I"></td>
      <td><input type="text" class="pull-right form-control" name="" value="J"></td>
    </tr>
    <tr data-key="2">
      <td><input type="text" class="pull-right form-control" name="" value="K"></td>
      <td><input type="text" class="pull-right form-control" name="" value="L"></td>
      <td><input type="text" class="pull-right form-control" name="" value="M"></td>
    </tr>
  </tbody>
</table>

<button id="btn1">Click</button>

但是,如果您的目标是创建该输出,则不需要两个循环。您可以直接循环输入以创建扁平字符串:

$("#btn1").click(function() 
  var tableData = $('input.form-control').map((_, inp) => inp.value).get().join('');
  console.log(tableData);
);
#btn1  width: 100px; height: 100px; 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table order-list">
  <thead>
    <td>A</td>
    <td>B</td>
    <td>C</td>
  </thead>
  <tbody>
    <tr data-key="1">
      <td><input type="text" class="pull-right form-control" name="" value="D"></td>
      <td><input type="text" class="pull-right form-control" name="" value="E"></td>
      <td><input type="text" class="pull-right form-control" name="" value="F"></td>
    </tr>
    <tr data-key="2">
      <td><input type="text" class="pull-right form-control" name="" value="H"></td>
      <td><input type="text" class="pull-right form-control" name="" value="I"></td>
      <td><input type="text" class="pull-right form-control" name="" value="J"></td>
    </tr>
    <tr data-key="2">
      <td><input type="text" class="pull-right form-control" name="" value="K"></td>
      <td><input type="text" class="pull-right form-control" name="" value="L"></td>
      <td><input type="text" class="pull-right form-control" name="" value="M"></td>
    </tr>
  </tbody>
</table>

<button id="btn1">Click</button>

【讨论】:

谢谢罗里!这很完美。最终我想使用php来获取这个数组并将其存储在SQL中,你认为使用这样的二维数组是否合适,还是我需要使用json之类的东西? 我肯定会为此使用 JSON,然后您可以保持数据的 2D 结构完整,尽管这是否重要取决于您使用它的目的。 我一直在看这个,我注意到每个数据元素都有一个标识它的引用,所以当我在上面使用 JSON stringify 时,它返回:[[] ,["D","E","F"],["H","I","J"],["K","L","M"]] 。我不确定这是否正确。你知道正确的程序是什么吗? (抱歉所有问题!) 这对我来说是正确的。您的意思是要删除第一个空的[] 我认为更多的是我看到的示例 jsons 使用名称来标识每个项目。我偷了一些其他代码并设法以这种格式生成了一个对象数组。你知道我如何访问其中的各个变量吗,tableData[1][1] 似乎不适用于这个: key: key: 1 values: (3) [...]​​0: "D" 1:“E”​​2:“F”长度:3个值:Array(3)[“D”,“E”,“F”] :…

以上是关于2D 数组查询 - 尽管使用了 join(),但输出中出现意外逗号;的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CosmosDB 中使用 Join 操作/子查询

包含 2D 字符数组的构造函数

尽管在类中声明了变量,但无法在范围内找到

是否应该在 SQLite 中使用 GROUP BY 在 UNION 上进行 INNER JOIN 花费数小时?

r2d3 + Shiny:无法在 D3 中渲染本地图像,尽管能够使用 URL 渲染图像

SQL JOIN 问题没有从查询中返回用户详细信息并将它们打印在数组中