2011-12-09 11 views
0

文字列を単語に変換しようとしていますが、javascriptとhtml5 canvasを使用してこれらを印刷しようとしています。文字列は任意の長さにすることができますが、単語の最大値として50をスペースで区切って使用しています。テキストプリントは、未定義の値が未定義」として印刷するときJavascript split()配列を出力し、未定義の値を文字列に変換する

 ctx.fillText(wordArray[0] + " " + wordArray[1] + " " + wordArray[2] + " " + wordArray[3] + " " + wordArray[4], leftOffset, txtHeight); 
     ctx.fillText(wordArray[5] + " " + wordArray[6] + " " + wordArray[7] + " " + wordArray[8] + " " + wordArray[9], leftOffset, txtHeight+20); 

など

しかし、:

してから使用して印刷:今、私は配列を作成するには、次のしています" の代わりに " 。"私は未定義の値を間違った方法でチェックしようとしているようですが、他に何を試していいのか分かりません。

さらに、この目標を達成する方法(文字列を単語に変換してから一度に5単語ずつ印刷する方法)について、より良い提案がある場合は、いくつかのより良いオプションをお勧めします。

おかげ

答えて

1

.splitによって返される配列()での未定義の値があってはなりません。あなたの印刷コードは、配列内の最も高いインデックスよりも高いハードコードされたインデックスを持っているので、あなたは未定義になっています。

申し訳ありませんが、私はこれをテストするために、今の時間を持っている、または.slice()はソース配列の範囲を抽出し、新しい配列を作成し、.join()は(明らかに).split()の反対ですが、多分ことを言及を超えてそれを説明していません次のようなものを試すことができます:

var wordArray = kstring.split(" ", 50), 
    i, h, l 
    wordsPerLine = 5, 
    lineHeight = 20; 

for (i=0, h=0, l=wordArray.length; i < l; i+=wordsPerLine, h+=lineHeight) { 
    ctx.fillText(wordArray.slice(i, Math.min(l, i+wordsPerLine)).join(" "), 
       leftOffset, txtHeight + h); 
} 
関連する問題