#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());