【问题标题】:Javascript - Fetch array element parameter by function is undefined/nullJavascript - 按函数获取数组元素参数未定义/空
【发布时间】:2013-12-30 08:52:46
【问题描述】:

我的函数获取的数组元素变量参数为空/未定义? 还是全部与拆分功能有关? 感谢您的帮助!

错误:

SCRIPT5007:无法获取未定义或空引用的属性“拆分”

JavaScript 代码:

newData = "1,1,1,1,1/2,2,2,2,2|3,3,3,3,3/4,4,4,4,4";

var arrPage = newData.split('|');

arrRow = arrPage[0].split('/');
rowCount = arrPage[0].split('/').length;    

for(var i = 0; i <= rowCount; i++){

var rData = arrPage[0].split("/");
a = rData[i];
renderTable(a);
}

function renderTable(rData) {

var cData = rData.split(',');

var c1 = cData[0];
var c2 = cData[1];
var c3 = cData[2];
var c4 = cData[3];
var c5 = cData[4];
var c6 = cData[5];
var c7 = cData[6];
var c8 = cData[7];
var c9 = cData[8];
var c10 = cData[9];
var c11 = cData[10];
var c12 = cData[11];
var rowData = "";

rowData =   "<tr>";
rowData +=  "<td>"+ c1 +"</td>";
rowData +=  "<td>"+ c2 +"</td>";
rowData +=  "<td>"+ c3 +"</td>";
rowData +=  "<td>"+ c4 +"</td>";
rowData +=  "<td>"+ c5 +"</td>";
rowData +=  "<td>"+ c6 +"</td>";
rowData +=  "<td>"+ c7 +"</td>";
rowData +=  "<td>"+ c8 +"</td>";
rowData +=  "<td>"+ c9 +"</td>";
rowData +=  "<td>"+ c10 +"</td>";
rowData +=  "<td>"+ c11 +"</td>";
rowData +=  "<td>"+ c12 +"</td>";
rowData +=  "</tr>";


$("#acquisitionStatusList tbody").append(rowData);
}

【问题讨论】:

  • arrPage[0] 中显然没有任何内容。
  • 这个问题的根源是arrPage的内容你没有给我们看。
  • @Loktar 实际上它 arrPage[0] 在我的代码中有一个值。但供参考的问题。我添加了一个变量。谢谢!
  • @jfriend00 抱歉,我再次编辑。 arrPage 的值为 ["1,1,1,1,1/2,2,2,2,2"]。
  • 在最新的编辑中,我添加了缺少的代码来支持 renderTable() 函数的问题。谢谢!

标签: javascript arrays parameters null split


【解决方案1】:

因为错误消息清楚地表明 arrpage[0] 为空。您可以做的是在代码中使用之前检查数组。

if (typeof array[index] !== 'undefined' && array[index] !== null) {
var rData = arrPage[0].split("/");
}
else
{
alert("empty");
}

【讨论】:

  • 对不起,我已经更改了源代码。在之前的代码中, arrPage[0] 已经有我项目中的数据。我要关注的是 renderTable() 函数。感谢您检查我的问题 :)
【解决方案2】:

这一行:

for(var i = 0; i <= rowCount; i++){

需要:

for(var i = 0; i < rowCount; i++){

您将离开数组的末尾。

此外,renderTable() 内部的 cData 将只有 5 个元素,但您尝试访问 12 个元素。


您的代码还有很多其他问题:

  1. 您要重新计算arrPage.split('/') 四次。执行一次并存储结果。
  2. 使用var 将所有变量声明为局部变量或全局变量。
  3. 正确缩进您的代码,使其更具可读性。
  4. 定义所有这些变量c1c2 等毫无意义...

【讨论】:

  • 感谢您回答和观察我的代码@jfriend00 我已经更新了参考代码,以便清楚地了解这个问题。我要关注这一点的是 renderTable() 函数,它获取一个数组元素作为参数。 c1、c2、c3 .. 是有目的的。得到一些数据后,他们每个人都有基于他们的价值的条件。
  • @codefish06 - 你明白为什么需要将for 循环更改为使用&lt; 而不是&lt;= 吗?正如您现在所拥有的那样,它正在向renderTable() 函数提供错误数据,因此您在renderTable() 中出现错误。
  • 感谢 for 循环的想法。我真的明白你在解释什么。但是,我将源代码更改为使用'
【解决方案3】:

我猜是这样的:

arrRow = "1,1,1,1,1/2,2,2,2,2";

arrRow = arrPage[0].split('/');
rowCount = arrPage[0].split('/').length;   

应该看起来更像这样:

arrPage = "1,1,1,1,1/2,2,2,2,2";

arrRow = arrPage.split('/');
rowCount = arrPage.split('/').length;

那么 arrRow 会在哪里:

["1,1,1,1,1", "2,2,2,2,2"]

rowCount 为 2。

但正如它所写的那样,它没有多大意义......关于你想要完成的事情。让我知道这是否能让你更接近......

编辑

var newData = "1,1,1,1,1/2,2,2,2,2|3,3,3,3,3/4,4,4,4,4";
var newPage = newData.split("|");
//work with "first" page... maybe 
newPage.forEach(function(newRow) { ... } );
//or
var newRow = newPage[0].split("/")
//then if you think about it, it is newRow that you are feeding to your renderTable function
newPage.forEach(function(newRow) { renderTable(newRow); } );

【讨论】:

  • 嗨!感谢您的回答。对不起,因为我没有放完整的代码以供清晰参考。现在我添加了变量来支持这个问题。谢谢!
  • 是的,@jfriend00 也已经找到了它,但它是您的 for 循环,您需要将
  • 我已经更改了for循环问题,但仍然出现错误。将数组元素作为函数的参数有什么问题吗?
  • 不,用文字告诉我你想用那个数组做什么......就像你的用例一样,我会向你展示让它做到这一点的代码......类似于:取那个数组,用管道分割新行,用 / 分割列,等等......
  • 这是过程:取出数组并用|分割它获取页面的数据。然后按 / 拆分数据以获取表行的数据。然后,除以 ,分布在每个 $("table td") 上。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 2011-09-25
  • 1970-01-01
相关资源
最近更新 更多