Shift 不是 javascript 中的函数

Shift is not a function in javascript

我的 html 中有多个 table(结构相同)。它们在选项卡中。我正在动态创建选项卡,我想将那些 table 数据发送到 mysql 数据库。所以我想使用 javascript 获取这些数据。我使用 for 循环正确创建了 TableData1,TableData2.... 数组。问题是我不能在这里增加 TableData ('TableData'+i).shift(); 。我收到一个错误。我想创建 TableData1.shift(),TableData2.shift().....

function myDataSendFunction(){
var i;

     for(i = 1; i <= array_size; i++){
         eval("var TableData"+i+"=[];");

      $('#mytable'+i+ ' tr').each(function(row, tr){
          ('TableData'+i)[row]={
              "colum1" : $(tr).find('td:eq(1)').text()
              , "colum2" :$(tr).find('td:eq(2)').text()
              , "colum3" : $(tr).find('td:eq(3)').text()
              , "colum4" : $(tr).find('td:eq(4)').text()
              , "colum5" : $(tr).find('td:eq(5)').text()
              , "colum6" : $(tr).find('td:eq(6)').text()
              , "colum7" : $(tr).find('td:eq(7)').text()
              , "colum8" : $(tr).find('td:eq(8)').text()
          }
      }); 

        ('TableData'+i).shift(); 

    }

}

我遇到了这个错误。

Uncaught TypeError: ("TableData" + i).shift is not a function
    at myDataSendFunction (<anonymous>:25:25)
    at HTMLInputElement.onclick (create.php:1)

显然你的元素 selection 是你犯的错误。如果不通过硬编码 array_size 使用 for 循环,您可以轻松地

  1. select 所有 table 一次使用一个常见的 属性,例如 class。您将获得一个包含 table 个对象的数组。
  2. 迭代 table 对象数组。
  3. 在循环内 select 每个 table 的所有行并将它们放入另一个循环中以提取数据并创建发送到数据库的数据数组。

找到我的sample implementation here

请记住,当您计划使用数组时,请坚持使用数组,而不是在字符串和数组之间来回移动。它会给您带来问题,例如您已经遇到的问题和不必要的脏代码。

很明显你对这个很陌生,所以我先给你看,然后再解释。

function myDataSendFunction(){
    var i,
        TableData = [];

    for(i = 1; i <= array_size; i++){
        TableData[i] = [];

        $('#mytable' + i + ' tr').each(function(row, tr){
            TableData[i][row]={
                  "colum1" : $(tr).find('td:eq(1)').text()
                , "colum2" : $(tr).find('td:eq(2)').text()
                , "colum3" : $(tr).find('td:eq(3)').text()
                , "colum4" : $(tr).find('td:eq(4)').text()
                , "colum5" : $(tr).find('td:eq(5)').text()
                , "colum6" : $(tr).find('td:eq(6)').text()
                , "colum7" : $(tr).find('td:eq(7)').text()
                , "colum8" : $(tr).find('td:eq(8)').text()
            };
        }); 

        TableData[i].shift();
    }
}

基础:

what should i do then?? I tried with TableData array, then problem occurs in here TableData[i][row] with Uncaught TypeError: Cannot set property '0' of undefined

您的麻烦在于为尚未定义的变量设置属性。在尝试分配 属性.

之前,您必须定义 TableData

一旦 TableData 是数组 (var TableData = []) 的 "initialized",您可以在 TableData 上设置属性 。但是您不能立即在 TableData 的属性 上设置属性 。例如,您不能直接跳转到 TableData[i][row]。您必须首先将 TableData[i] 设置为数组 (TableData[i] = []), 然后 您可以将 TableData[i][row] 设置为某个值。

通过尝试用 eval 解决该问题,您 运行 进入了一个充满问题的全新世界。尽量避免 eval...这是一个非常复杂的野兽,往往会引起很多混乱和痛苦。

查看 MDN's Working with objects 文档可能有助于更好地了解 JavaScript 的数组和对象的情况。