我正在尝试将字符串转换为单词,然后使用javascript和html5画布打印这些字符串。字符串可以是任意长度,但我使用50作为单词的最大值(用空格分隔)。现在我有以下内容来创建数组:
var wordArray = kstring.split(" ", 50);
for(var k = 0; k < wordArray.length; k++)
{
if(typeof wordArray[k] == 'undefined')
wordArray[k] = " .";
}
然后使用:
打印 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个单词)。请随意提出一些更好的选择。
由于
答案 0 :(得分: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);
}
相反,但也许您可以尝试这样的事情:
{{1}}