Я хочу, чтобы при создании экземпляра класса TableCategory объект был создан с использованием данных, переданных при создании экземпляра. Я хочу, чтобы это происходило автоматически в ...
2 ответа
forEach()
ничего не возвращает. Создайте пустой объект categoryData
, а затем заполните его в цикле forEach
.
Кроме того, вам необходимо использовать стрелочную функцию, чтобы иметь доступ к this
в функции обратного вызова.
class TableCategory {
constructor(categoryValues = []) {
this.categoryValues = categoryValues;
this.categoryKeys = ['alpha', 'beta', 'gamma', 'delta'];
this.categoryData = {};
this.categoryKeys.forEach((key, i) =>
this.categoryData[key] = this.categoryValues[i]
)
}
}
const foo = new TableCategory(['a', 'b', 'c', 'd']);
console.log(foo.categoryData.beta); // b
forEach
не возвращает ничего, кроме undefined
. Вы все еще можете получить желаемый объект функциональным способом, но с Object.fromEntries
.
Кроме того, поскольку вы говорите, что используете класс, потому что намереваетесь изменить экземпляры с помощью геттеров и сеттеров, я не думаю, что было бы хорошей идеей по-прежнему хранить значения и ключи отдельно от третьего свойства, которое имеет все информация о ключах и значениях.
Например, вы можете сделать это:
class TableCategory {
constructor(values = []) {
this._obj = Object.fromEntries(['alpha','beta','gamma', 'delta']
.map((key, i) => [key, values[i]]));
}
get values() {
return Object.values(this._obj);
}
get keys() {
return Object.keys(this._obj);
}
}
let obj = new TableCategory(["this", "is", "a", "test"]);
console.log(obj.values);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.