打印Javascript split()数组并将未定义的值转换为字符串

时间:2011-12-09 06:26:25

标签: javascript html5 canvas split html5-canvas

我正在尝试将字符串转换为单词,然后使用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个单词)。请随意提出一些更好的选择。

由于

1 个答案:

答案 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}}