Я новичок и занимаюсь этим упражнением на exercise.io, я пытаюсь подтолкнуть пару значений к объекту, вот мой код:
class School{
constructor(){
this.rosterList = {};
}
roster(){
return this.rosterList;
}
add(name,grade){
let nameArry = [];
this.rosterList.grade = nameArry.push(name);
}
}
let a = new School;
a.add('Aimee', 2)
console.log(a.roster());
которые приводят к
{ 1-й класс }
результат, который я пытался получить
{2: ['Aimee']}
Мои вопросы - почему массив становится 1? Как нажимать имя в массив, как он должен? И как нажать "2" внутри, а не "класс", спасибо
Вам нужно проверить, существует ли ключ, а затем либо нажимать, либо присваивать значение, например, здесь, где вы используете this.rosterList[grade]
скобки, this.rosterList[grade]
, чтобы установить ключ.
Обратите внимание, что при назначении Arry.push(value)
вы получите длину массива, а не массив.
Фрагмент стека
class School{
constructor(){
this.rosterList = {};
}
roster(){
return this.rosterList;
}
add(name,grade){
this.rosterList[grade] ?
this.rosterList[grade].push(name) :
this.rosterList[grade] = [name];
}
}
let a = new School;
a.add('tom', 2)
a.add('amy', 2)
console.log(a.roster());
Вместо использования тернарного оператора вы можете использовать concat
add(name,grade){
this.rosterList[grade] = (this.rosterList[grade]||[]).concat(name);
}
Вы получаете выход {grade: 1}
, потому что в строке:
this.rosterList.grade = nameArry.push(name);
Вы просто назначаете prop grade возвращаемое значение nameArry.push(name), метод push возвращает длину массива, который в вашем случае равен 1.
Чтобы получить желаемый результат, измените эту строку на:
nameArry.push(name);
this.rosterList[grade] = nameArry;
this.rosterList[grade] = nameArry;
Вы перезапишете существующее значение при добавлении второго имени.
Вы можете использовать this.rosterList[grade].concat([name])
для добавления новых имен в уже существующий массив для определенного класса. Если массив для этого grade
не существует, вы можете this.rosterList[grade] = []
инициализировать this.rosterList[grade] = []
. См. Рабочий код ниже:
class School{
constructor(){
this.rosterList = {};
}
roster(){
return this.rosterList;
}
add(name,grade){
if(!this.rosterList[grade]) this.rosterList[grade]=[];
this.rosterList[grade] = this.rosterList[grade].concat([name]);
}
}
let a = new School;
a.add('tom', 2);
a.add('Aimee', 2);
console.log(a.roster());
array.push()
возвращает новую длину массива, поэтому вы не можете сделать это в одной строке. Но вы можете добавить значение непосредственно при создании массива. И чтобы использовать переменную как ключ, вы должны использовать нотацию []
.
class School {
constructor() {
this.rosterList = {};
}
roster() {
return this.rosterList;
}
add(name, grade) {
let nameArry = [name];
this.rosterList[grade] = nameArry;
}
}
let a = new School();
a.add('tom', 2)
console.log(a.roster());
let nameArry = [name]; this.rosterList[grade] = nameArry;
Вы перезапишете существующее значение при добавлении второго имени.