#javascript #arrays #class
#javascript #массивы #класс
Вопрос:
У меня есть массив с объектами, подобными этому:
var animals = [new Animal("dog", "Max"), new Animal("dog", "Ben"), new Animal("cat", "Ella"), new Animal("cat", "Sophia")];
И теперь мне нужно управлять каждым объектом как переменной, вот так:
console.log(dog_max.sound());
console.log(cat_sophia.eat());
Как мне это сделать?
Теоретически, я не знаю, какой объект имеет какой индекс,
Я буду использовать функцию случайного смешивания для массива.
Комментарии:
1. Простыми словами, вы запрашиваете динамические имена переменных.
2. опишите Animal (класс)
3. создайте метод разрешения / класс. Например.
AnimalFinder.GetDogMax(Animal[])
4. зачем вам это вообще нужно?
5. У вас должен быть какой-то входной параметр. Например, «В этом массиве найдите
dog
объект с именемMax
» . Это проблема XY , пожалуйста, опубликуйте свои входные данные и ожидаемый результат, а также четкое описание проблемы.
Ответ №1:
Вы хотите создать динамические имена переменных, что невозможно с eval()
Используя eval()
class Animal{
constructor(name1,name2){
this.name1 = name1
this.name2 = name2
}
sound(){
return `${this.name1} makes sound`;
}
}
var animals = [new Animal("dog", "Max"), new Animal("dog", "Ben"), new Animal("cat", "Ella"), new Animal("cat", "Sophia")];
for(let i = 0;i<animals.length;i ){
eval(`var ${animals[i].name1}_${animals[i].name2.toLowerCase()} = animals[i]`);
}
console.log(dog_max.sound())
console.log(cat_ella.sound())
Используя Object
Но использование eval()
не рекомендуется. Вы можете создать объект для хранения этих
class Animal{
constructor(name1,name2){
this.name1 = name1
this.name2 = name2
}
sound(){
return `${this.name1} makes sound`;
}
}
var animals = [new Animal("dog", "Max"), new Animal("dog", "Ben"), new Animal("cat", "Ella"), new Animal("cat", "Sophia")];
let a = {};
for(let i = 0;i<animals.length;i ){
a[`${animals[i].name1}_${animals[i].name2.toLowerCase()}`] = animals[i]
}
console.log(a.dog_max.sound())
console.log(a.cat_ella.sound())