如何从字符串中获取一组单词?

时间:2019-04-23 14:33:19

标签: javascript typescript cordova

我的情况如下:

我的弦很大。我想将其转换为每个元素都是一个单词的数组。然后,在我对方法进行的每个递归调用中,我都想从单词数组中获取50个元素。例如,在第一个电话中,我希望从0到50,然后在下一个电话中,我希望从50到100,依此类推。

检查数组的开始和结束范围是否超出范围时,我的问题就出现了。

我的代码如下:

public async readTts(start: number, end: number): Promise<any> {
    this.talking = true;
    let words: Array<string> = document.getElementById('contenido').innerText.split(' ');
    let string = '';

    words.forEach((word: string) => string += word + ' ');

    console.log(string)

    await this.tts.speak({
      text: string,
      locale: 'es-ES',
      rate: 1
    });

    if (end != words.length - 1) {
      if (start + 50 < words.length - 1) start += 50;
      else start = words.length - 1;

      if (end + 50 < words.length - 1) end += 50;
      else end = words.length - 1;
      this.readTts(start, end);
    } else this.talking = false;
  }

this.readTts(0, 50)

使用此代码,到目前为止我的代码还没有崩溃。但是从第3次递归调用开始,我开始收到错误的文本。这些是我从很长的文本中得到的文本:

电话1:

La filosofía debería ser accesible para todo el mundo. Por eso publicaré esto en Wrixy.Pero, la filosofía no es un montón de fechas y de estupideces que te obligan a estudiar en el instituto. Si piensas que la filosofía es eso, estás muy equivocado o equivocada.La filosofía es comprender el 

电话2:

mundo, pero no sólo "el mundo" en general... es SOBRE TODO comprenderte A TI MISMO.Por eso, a pesar de que tengo sólo 22 años,... y que bueno, es probable que me queden muchas cosas por vivir y que probablemente en el futuro termine editando algunas partes de esta obra... Considero que he vivido suficientes cosas como para dar mi punto de vista. Para dar a entender las cosas que yo he vivido, de una forma práctica y sencilla.No esperéis que cuide mucho las formas ni revise los textos. Leer esta obra será como simplemente estar chateando con un amigo. Un 

致电3。

que he vivido suficientes cosas como para dar mi punto de vista. Para dar a entender las cosas que yo he vivido, de una forma práctica y sencilla.No esperéis que cuide mucho las formas ni revise los textos. Leer esta obra será como simplemente estar chateando con un amigo. Un amigo que tal vez ha vivido cosas con más intensidad que vosotros y que puede que podáis aprender una o dos cosas de él.Con lo cual, con el simple hecho de que esto sirva a alguno de vosotros para progresar en vuestra vida, y madurar mental y emocionalmente antes de tiempo, mucho antes de lo que lo hice yo y sin tener que pasar por los mismos infiernos por los que tuve que pasar yo... pues me alegro.Titulo esta obra "filosofía de Dalas" porque realmente es MI filosofía de la vida. Es la forma en la que YO veo las 

您可能会注意到,在第3个呼叫中,它似乎超过了50个字,并且重复了在第2个呼叫中打印的文本:

que he vivido suficientes cosas como para dar mi punto de vista. Para dar a entender las cosas que yo he vivido, de una forma práctica y sencilla.No esperéis que cuide mucho las formas ni revise los textos. Leer esta obra será como simplemente estar chateando con un amigo. Un 

此代码有什么问题?当我打印我正在使用的变量时,它们似乎具有正确的值。

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我将从创建数组开始,然后递归拆分它。 您可以使用数组方法shiftpop轻松地做到这一点,这取决于要走的方向。

我可能会做这样的事情:

const text = 'This is a quick test text. We only have several words but it proofs the point.';
const words = text.split(' ');

const read = (maxWords) => {
    let string = '';

    for (let i = 0; i < maxWords; i++) {
        if (words.length > 0) {
            string += words.shift() + ' ';
        }
    }

    // do something with the string
    console.log(string);

    if (words.length > 0) {
        read(maxWords);
    }
}

read(5);

或者如果您想保留单词数组:

const text = 'This is a quick test text. We only have several words but it proofs the point.';
const words = text.split(' ');

let position = 0;

const read = (maxWords) => {
    let string = '';

    for (let i = 0; i < maxWords; i++) {
        if (position < words.length) {
            string += words[position] + ' ';
            position++;
        }
    }

    console.log(string);
    // do something with the string

    if (position < words.length) {
        read(maxWords);
    }
}

read(5);

输出:

This is a quick test.
text. We only have several
words but it proofs the
point.

当然可以改进,因为在此示例中我有多余的循环。