所以基本上我一直在使用Javascript开发我的一个小型个人项目,而且我遇到了麻烦。我试图使用Javascript从2D数组生成HTML列表。这是我的代码:
function generatePageFromArray(page, array){
var entry, i, j;
for (i = 0; i < array.length; ++i) {
entry = array[i];
for (j = 0; j < entry.length; j = j + 2) {
page = page + '<tr>'+
'<td class="favoritesContainer"><input type="checkbox" class="favorites"></input></td>';
page = page + '<td class="english">' + entry[j,0] + '</td>';
page = page + '<td class="spanish">';
if (entry[j,1].indexOf("|") > 0){
var spanishTerms = entry[j,1].split("|");
var strLength = spanishTerms.size;
for (i = 0; i < strLength; i++){
page = page.concat(spanishTerms[i] + '<br>');
}
}
else{
page = page + entry[j,1];
}
page = page + '</td>'
page = page + '</tr>';
}
}
return page;}
它不断抛出一个未捕获的RangeError:此行上的字符串长度无效:
page = page + '<tr>'+
'<td class="favoritesContainer"><input type="checkbox" class="favorites"></input></td>';
我不知道为什么。我也试过使用.concat()来追加,但没有。
答案 0 :(得分:10)
您的二维数组访问不正确,但主要问题是您在内循环中重新使用变量i
:
for (i = 0; i < strLength; i++){
page = page.concat(spanishTerms[i] + '<br>');
}
i
与您的外部循环中的i
相同。因此,您收到的错误告诉您,您正在构建超出运行时系统容量的大量字符串。为该循环声明一个新变量。
从数组数组中访问值需要两组[ ]
:
entry[j][0]
答案 1 :(得分:1)
RangeError: Invalid string length
的另一个来源是以下示例(尝试自己查找错误,这是读者的一项任务):
var urls = "http://example.org/1";
var url = "http://example.org/2";
for(var i=0;i<100;i++) {
urls += urls + url + "\r\n"; //on this line, the exception is thrown
}
答案 2 :(得分:0)
我收到了这个错误:
未捕获RangeError:字符串长度无效
通过使用i for outer for循环修复它,使用DIFFERENT j for inner for loop。
我有外循环使用i,内循环仍然与i, 然后上面的错误,花了我很多时间来弄清楚真正的问题是2 i的冲突,
for (var i = 0; i < features.length; i++) {
for (var i = 0; i < features.length; i++) {
i;// conflict i will cause error above
}
}
您必须使用j或不同的字母进行内循环