使用变量推送json

时间:2019-04-14 20:10:38

标签: javascript json vue.js

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

2 个答案:

答案 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);