Я не могу установить время для правильной работы циклов в TS - PullRequest
0 голосов
/ 07 января 2020

Я хочу получить массив массивов с уникальными значениями, но в какой-то момент

, в то время как

пропускается или игнорируется (полагаю, из-за асинхронного характера Это). Может ли кто-нибудь помочь с добавлением обещания к этому или установкой

async / await

структуры или предоставлением лучшего совета, как проверять массивы. Я попытался добавить

async / await

, но я получаю ошибку, и я не уверен, где я могу добавить обещание или использовать его. Это

getSeveralArrays() {
 for (let index = 0; index < 50; index++) {
        this.getValue();
      }
}
getValue() {

    this.i++;

    this.array = [];
    this.randomArray = [];
for (let index = 0; index < 4; index++) {

    this.randomValue = this.getRandom();

    if (this.array.length === 2) {

        while ((this.array[0] === this.randomValue) || (this.array[1] === this.randomValue)) {
            this.randomValue = this.getRandom();
        }

        this.array.push(this.randomValue);


    } else if (this.array.length === 3) {

        while ((this.array[0] === this.randomValue) || (this.array[1] === this.randomValue) || (this.array[2] === this.randomValue)) {
            this.randomValue = this.getRandom();
        }

        this.array.push(this.randomValue);


    } else {

        this.array.push(this.randomValue);

    }

    console.log({...this.array});

    this.randomArray.push({ind: this.i, val: this.array});

    }
}


  getRandom() {

      const value = Math.floor(Math.random() * 4);
      return value;
  }

1 Ответ

0 голосов
/ 07 января 2020

Во всем вашем коде нет ничего асинхронного, поэтому нет необходимости в async/await. Кроме того, while не является асинхронным.

Вы пропустили регистр для длины 1, поэтому второй элемент всегда может совпадать с первым.

class X {
  getSeveralArrays() {
    for (let index = 0; index < 50; index++) {
      this.getValue();
    }
  }
  getValue() {
    this.i++;

    this.array = [];
    this.randomArray = [];
    for (let index = 0; index < 4; index++) {
      this.randomValue = this.getRandom();

      if (this.array.length === 1) {
        while (this.array[0] === this.randomValue) {
          this.randomValue = this.getRandom();
        }

        this.array.push(this.randomValue);
      } else if (this.array.length === 2) {
        while (this.array[0] === this.randomValue || this.array[1] === this.randomValue) {
          this.randomValue = this.getRandom();
        }

        this.array.push(this.randomValue);
      } else if (this.array.length === 3) {
        while (
          this.array[0] === this.randomValue ||
          this.array[1] === this.randomValue ||
          this.array[2] === this.randomValue
        ) {
          this.randomValue = this.getRandom();
        }

        this.array.push(this.randomValue);
      } else {
        this.array.push(this.randomValue);
      }

      console.log({ ...this.array });

      this.randomArray.push({ ind: this.i, val: this.array });
    }
  }

  getRandom() {
    const value = Math.floor(Math.random() * 4);
    return value;
  }
}

console.log(new X().getSeveralArrays());

Также все эти проверки могут быть упрощены:

      while (this.array.some(value => value === this.randomValue)) {
        this.randomValue = this.getRandom();
      }

И, как правило, в качестве небольшого обзора кода: если вам не нужен доступ к чему-либо из другого метода класса (или где-то за пределами), вы не должны помещать все эти значения в свойствах класса, но сохраните их как значения внутри ваших функций.

Так что this.randomValue и this.array должны быть просто определены в вашей функции с помощью let или const.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...