我想使用变量将一些数据推送到预定义的JSON变量中。 这是我预定义的JSON变量:
data(){
return {
dataMON: [],
dataTUE: [],
dataWED: [],
dataTHU: [],
dataFRI: []
}
}
这是我要推送的内容:
getTimeTable() {
var db = firebase.firestore();
var date = new Date();
var weekday = new Array(5);
weekday[0] = "monday";
weekday[1] = "tuesday";
weekday[2] = "wednesday";
weekday[3] = "thursday";
weekday[4] = "friday";
weekday.forEach(day => {
var dayLowerCase = day.slice(0, 3);
var dayUpperCase = dayLowerCase.toUpperCase();
var tmpTable = {
period: doc.id,
course: fullTempTable.fach,
teacher: fullTempTable.lehrer,
room: fullTempTable.raum
};
this.day.[dayUpperCase].push(tmpTable);
});
}
问题是我不能使用day [dayUpperCase],因为那样会试图找到对象dayUpperCase。在这种情况下,您甚至可以使用变量?
答案 0 :(得分:1)
您必须在字符串中构造整个属性名称。
var dayUpperCase = dayLowerCase.toUpperCase();
var propertyName = "day" + dayUpperCase;
然后,您可以使用方括号符号(前面不使用.
)来访问它:
this[propertyName]
答案 1 :(得分:0)
更好的做法是创建另一个对象:
data() {
return {
day: {
MON: [],
TUE: [],
WED: [],
THU: [],
FRI: []
}
};
}
从长远来看,这比添加字符串更干净,因为它将使您的data
对象保持井井有条。当您只需要创建另一个对象时,必须添加字符串来创建属性名称有点“ code smell”。例如,如果将来的开发人员看到了data
对象,他们可能会ctrl-f
使用“ dataMON”来查看/设置它的位置,但是由于构造了属性,所以这行不通。同样,许多IDE可以让您“查找给定属性的所有用法”。由于动态属性,这也不起作用。使用单独的对象将使其他开发人员更容易找到.day
对象的修改/访问位置。
然后您可以写(请注意,使用.
时不需要[]
)
this.day[dayUpperCase].push(tmpTable);