Javascript 使用变量推送json

Javascript 使用变量推送json,javascript,json,vue.js,Javascript,Json,Vue.js,我想使用变量将一些数据推送到预定义的JSON变量中。 以下是我预定义的JSON变量: data(){ return { dataMON: [], dataTUE: [], dataWED: [], dataTHU: [], dataFRI: [] } } 这就是我想推动的东西: getTimeTable() {

我想使用变量将一些数据推送到预定义的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。在这种情况下,您甚至可以使用变量吗?

您必须在字符串中构造整个属性名

var dayUpperCase = dayLowerCase.toUpperCase();
var propertyName = "day" + dayUpperCase;
然后,您可以使用括号表示法访问它(前面不使用
):


最好创建另一个对象:

data() {
    return {
        day: {
            MON: [],
            TUE: [],
            WED: [],
            THU: [],
            FRI: []
        }
    };
}
从长远来看,这比添加字符串更干净,因为它将使
数据
对象保持有序。当您只需要创建另一个对象时,必须添加字符串来创建属性名称有点像一个“”。例如,如果未来的开发人员看到了
数据
对象,他们可能会对“dataMON”执行
ctrl-f
以查看访问/设置它的位置,但由于属性是构造的,所以这不起作用。类似地,许多IDE将允许您“找到给定属性的所有用法”;由于动态特性,这也不起作用。使用单独的对象可以让其他开发人员更容易地找到修改/访问
.day
对象的地方

然后您可以编写(请注意,使用
[]
时,我们不需要
):


.是的,我想那也行。但是@Quentins的解决方案更适合我的情况。无论如何,谢谢。(更新的答案)我不知道你的项目的细节,但是当你应该创建另一个对象时,必须添加字符串来创建属性名是一种“代码气味”。根据您展示的代码,这个解决方案可能会被认为是更好的实践。但不用担心,只要对你最有效:)
data() {
    return {
        day: {
            MON: [],
            TUE: [],
            WED: [],
            THU: [],
            FRI: []
        }
    };
}
this.day[dayUpperCase].push(tmpTable);