1. ホーム
  2. javascript

[解決済み] Uncaught RangeError: JavaScript で文字列に追加する際の無効な文字列長

2022-02-04 05:17:06

質問

基本的に、私は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 を外側のループで使用します。このように、表示されるエラーは、ランタイムシステムの容量を超える巨大な文字列を構築していることを告げているのです。そのループのために新しい変数を宣言してください。

配列の配列から値にアクセスするには、2組の [ ] :

entry[j][0]