开发者问题收集

未捕获的 RangeError:在 JavaScript 中附加到字符串时出现无效的字符串长度

2015-03-08
86005

基本上,我一直在用 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;}

它不断在此行上抛出 Uncaught RangeError:无效字符串长度:

page = page + '<tr>'+
                    '<td class="favoritesContainer"><input type="checkbox" class="favorites"></input></td>';

我不知道为什么。我也尝试过使用 .concat() 来附加,但没有任何效果。

2个回答

您的二维数组访问不正确,但主要问题是您在内部循环中重复使用变量 i

for (i = 0; i < strLength; i++){
    page = page.concat(spanishTerms[i] + '<br>');   
}

i 将与外部循环中的 i 相同。因此,您收到的错误告诉您正在构建一个超出运行时系统容量的超大字符串。为该循环声明一个新变量。

从数组的数组访问值需要两组 [ ]

entry[j][0]
Pointy
2015-03-08

我得到了这个错误:

未捕获的 RangeError:无效的字符串长度

并通过在外循环中使用 i,在内循环中使用不同的 j 来修复它。

我的外循环使用 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 或不同的字母

hoogw
2016-05-12