在Javascript中拼接和取消后,无法将数组渲染到表中

时间:2014-04-19 17:10:14

标签: javascript arrays html-table splice

我不确定我是做错了还是默认行为。我正在使用splice / unshift在2d数组的顶部添加一个新元素,然后尝试将该数组渲染到表中。

  for (var i = 0; i < arr1[i].length; i++) {
      for (var j = 0; j < arr1.length; j++) {
          var r = arr1[j][i];
          dt(r);
      }
      dttop(i);
  }

  function dt(x) {
      if (isFinite(x) == true) {
          numeric++;
      } else {
          str++;
      }
  }

  function dttop(x) {
      if (numeric > str)
          arr1.splice(0, 0, "number");
      else
          arr1.splice(0, 0, "string");
  }
  alert(arr1); // alert--1  
   // render the result into html table
  s = '<table border=0>';
  for (var i = 0; i < arr1.length; i++) {
      s = s + '<tr>';
      for (var j = 0; j < arr1[i].length; j++) {
          s = s + '<td><font size="1" face="Verdana">' + arr1[i][j] + '</font></td>';
      }
      s = s + '</tr>';
  }
  s = s + '</table>';
  renderArea.innerHTML = s;

所以,当我使用javascript splice()或unshift()时。我得到一个这样的输出enter image description here 但是,如果我提醒1,那么它会给我这样的结果enter image description here 这证明它是从拼接函数中添加额外的位而不是渲染为html ..

请帮忙

2 个答案:

答案 0 :(得分:1)

我可以看到您正在使用.splice()将字符串"number""string"添加到arr1数组的开头。这样做意味着当您循环访问以添加值时,代码会尝试访问字符串的索引(arr1[i][j]),从而生成undefined

答案 1 :(得分:0)

  

我正在使用splice / unshift在2d数组的顶部添加一个新元素,然后尝试将该数组渲染到表中。

splice()方法返回一个数组,其中包含从原始数组中删除的元素。如果要在给定二维数组的前提下添加值:

var num_arr = [[1,2,3]];

更简单的解决方案是:

json_arr = JSON.stringify(num_arr).replace("[[","[0,[");

渲染到表格将是:

function rowMaster(value,index)
  {
  return "<tr><td>value</td></tr>".replace("value",value);
  }

function parseFarce(value,index)
  {
  if(typeof value == "number") return "<th>value</th>".replace("value",value);

  else if(delete value.length === false && delete value[-1] === true && JSON.stringify(([]).constructor().valueOf()) === "[]") 
    {
    return value.map(rowMaster);
    }

  else
    {
    return value;
    }
  }

JSON.parse(json_arr).map(parseFarce);

<强>参考