【问题标题】:2D Array Query - unexpected commas in output despite using join();2D 数组查询 - 尽管使用了 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

【问题讨论】:

    标签: javascript jquery arrays forms


    【解决方案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”] :{…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多