Как вставить пару значений в объект с помощью метода?

1

Я новичок и занимаюсь этим упражнением на 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" внутри, а не "класс", спасибо

Теги:

4 ответа

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);           
}
2

Вы получаете выход {grade: 1}, потому что в строке:

this.rosterList.grade = nameArry.push(name);

Вы просто назначаете prop grade возвращаемое значение nameArry.push(name), метод push возвращает длину массива, который в вашем случае равен 1.

Чтобы получить желаемый результат, измените эту строку на:

 nameArry.push(name);
 this.rosterList[grade] = nameArry; 
  • 0
    With this.rosterList[grade] = nameArry; Вы перезапишете существующее значение при добавлении второго имени.
1

Вы можете использовать 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());
0

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());
  • 0
    С let nameArry = [name]; this.rosterList[grade] = nameArry; Вы перезапишете существующее значение при добавлении второго имени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню