Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Класс, который хранит в себе данные о заказе (https://javascript.ru/forum/misc/84200-klass-kotoryjj-khranit-v-sebe-dannye-o-zakaze.html)

NovichokJS 04.07.2022 21:03

Класс, который хранит в себе данные о заказе
 
Помогите плз. Как сделать корректно чтобы при создании заказа генерировался id заказа и чтобы логика метода confirmOrder и метода isValidType была корректной?
Метод confirmOrder должен проставлять ордер в статус confirmed = true (если заказ не был подтвержден раньше) и дату конфирма ставить в текущую.
Метод isValidType должен принимать только два значения Buy, Sell - метод возвращает true, если это требование выполняется, и false если нет.
Мой код:

class Order {
  confirmed = false;
  id = Math.floor(Math.random() * 100);
  dateCreated = new Date();
  dateConfirmed;
  constructor(price, city, type) {
    this.price = price;
    this.city = city;
    this.type = type;
  }
  checkPrice() {
    if (this.price > 1000) {
      return true;
    }
    return false;
  }
  confirmOrder() {
    if (this.confirmed == false) {
      this.confirmed = true;
    }

    this.dateConfirmed = new Date();
  }

  isValidType() {
    if (this.type == false) {
      return 'Buy';
    }
    return 'Sell';
  }
}

рони 04.07.2022 21:23

NovichokJS,
:-?
confirmOrder() {
    if (!this.confirmed) {
    this.confirmed = true;
    this.dateConfirmed = new Date();
      }
  }

  isValidType() {
     return ['Sell', 'Buy'].includes(this.type);
  }

NovichokJS 04.07.2022 21:32

спасибо, а как корректно id заказа прикрутить в код? то, что я написал id = Math.floor(Math.random() * 100); - это неверно. Это должен быть наверно рандомное число от 1 до бесконечности и чтобы при новом заказе id не повторился

voraa 04.07.2022 21:42

Цитата:

Сообщение от NovichokJS
спасибо, а как корректно id заказа прикрутить в код? то, что я написал id = Math.floor(Math.random() * 100); - это неверно. Это должен быть наверно рандомное число от 1 до бесконечности и чтобы при новом заказе id не повторился

Можно использовать Date.now(); - У всех заказов, поступивших не в одну и ту же милисекунду будет разный id. Если есть вероятность, что в одну ms поступит несколько заказов, тогда
Date.now()*100 + Math.floor(Math.random() * 100)

рони 04.07.2022 21:45

Цитата:

Сообщение от NovichokJS
чтобы при новом заказе id не повторился

сделайте счётчик или так ...
id = self.crypto.randomUUID();

NovichokJS 04.07.2022 22:09

Цитата:

Сообщение от рони (Сообщение 546461)
сделайте счётчик или так ...
id = self.crypto.randomUUID();

ого, такого я не проходил еще. А вот так корректно? или как лучше?

class Order {
  confirmed = false;
  dateCreated = new Date();
  dateConfirmed;
  id;
  constructor(price, city, type) {
    this.price = price;
    this.city = city;
    this.type = type;
  }
  checkPrice() {
    if (this.price > 1000) {
      return true;
    }
    return false;
  }
  confirmOrder() {
    if (!this.confirmed) {
      this.confirmed = true;
      this.dateConfirmed = new Date();
      this.id = Math.floor(Math.random() * 100);
    }
  }

  isValidType() {
    return ['Sell', 'Buy'].includes(this.type);
  }
}

рони 04.07.2022 22:22

NovichokJS,
вам виднее когда нужен id

рони 04.07.2022 22:26

NovichokJS,
let count = 0;
class Order {
  confirmed = false;
  dateCreated = new Date();
  dateConfirmed;
  id = count++;

NovichokJS 04.07.2022 22:44

Цитата:

Сообщение от рони (Сообщение 546464)
NovichokJS,
let count = 0;
class Order {
  confirmed = false;
  dateCreated = new Date();
  dateConfirmed;
  id = count++;

Нужно в рамках класса. Как правильно вообще сгенерировать рандомно id при создании заказа? и чтобы у него был тип данных String?

рони 05.07.2022 00:03

Цитата:

Сообщение от NovichokJS
чтобы у него был тип данных String?

:-?
alert(typeof self.crypto.randomUUID() );


Часовой пояс GMT +3, время: 06:19.