Убедитесь, что случайный выбор объекта javascript не выбран дважды

#javascript #arrays #object

Вопрос:

Я хочу сохранить случайный выбор функции в массиве, чтобы в будущих запусках случайной функции не было выбрано ранее выбранное свойство. Например, я хочу, чтобы, если Англия выбрана случайным образом, в будущих запусках этой функции Англия будет опущена.

Объект Javascript

 var countryDataObj = {
    England: { Title: "England", imageUrl: "", Total: 70 },
    Spain: { Title: "Spain", imageUrl: "", Total: 57 },
    Wales: { Title: "Wales", imageUrl: "", Total: 52 },
    Germany: { Title: "Germany", imageUrl: "", Total: 16 },
    Ireland: { Title: "Ireland", imageUrl: "", Total: 14 },
    Russia: { Title: "Russia", imageUrl: "", Total: 19 },
    Portugal: { Title: "Portugal", imageUrl: "", Total: 32 },
    Wales: { Title: "Wales", imageUrl: "", Total: 52 },
    France: { Title: "France", imageUrl: "", Total: 49 }
}
 

Текущая функция рандомизации

 function returnCountry(obj) {
    var keys = Object.keys(obj);
    return obj[keys[ keys.length * Math.random() << 0]];
};
 

Ответ №1:

Есть много способов сделать это, одним из которых был бы объектно-ориентированный подход.

 class CountryPicker {
  countries = [
    { Title: "England", imageUrl: "", Total: 70 },
    { Title: "Spain", imageUrl: "", Total: 57 },
    { Title: "Wales", imageUrl: "", Total: 52 },
    { Title: "Germany", imageUrl: "", Total: 16 },
    { Title: "Ireland", imageUrl: "", Total: 14 },
    { Title: "Russia", imageUrl: "", Total: 19 },
    { Title: "Portugal", imageUrl: "", Total: 32 },
    { Title: "Wales", imageUrl: "", Total: 52 },
    { Title: "France", imageUrl: "", Total: 49 }
  ];

  randomCountry() {
    if (this.countries.length == 0) throw new Error("None left");

    const index = Math.floor(Math.random() * this.countries.length);

    const result = this.countries[index];
    this.countries.splice(index, 1);

    return resu<
  }
}

const picker = new CountryPicker();
console.log(picker.randomCountry());
 

Игровая площадка