JavaScript函数将对象返回为JSON

时间:2018-08-20 14:40:58

标签: javascript

需要将对象添加到我的Firestore数据库中。它仅接受JSON对象。但是,我也想排除对象的某些字段,以免将其发送到数据库。

因此,我添加了一个函数,该函数应返回如下所示的JSON:

export class Entry {

date: number;
timeStart: number;
timeEnd: number;
entry: EntryData;

// To be excluded from database
selected: boolean;

constructor(date: number, timeStart: number, timeEnd: number, entry: EntryData) {
    this.date = date;
    this.timeStart = timeStart;
    this.timeEnd = timeEnd;
    this.entry = entry;
}

toJSON() {
    return {date: this.date, timeStart: this.timeStart, timeEnd: this.timeEnd, entry: JSON.parse(JSON.stringify(this.entry)) };
}
}

不过,当我console.log(entry.toJSON())这样做时,我会得到:

workday.service.ts:122 ƒ () {
        return { date: this.date, timeStart: this.timeStart, timeEnd: this.timeEnd, entry: JSON.parse(JSON.stringify(this.entry)) };
    }

我想使用如下功能:

this.employeeRef.collection('Entries').add(entry.toJSON);

但这不起作用。它是这样的:

    this.employeeRef.collection('Entries').add(JSON.parse(JSON.stringify(entry)));

但是这样selected字段不会从数据库中排除。

有什么想法吗?请注意,我使用的是TypeScript(带有Angular),但我认为那是一个纯JavaScript问题。

2 个答案:

答案 0 :(得分:1)

您可能想使用getter:

 get toJSON() {
   return {date: this.date, timeStart: this.timeStart, timeEnd: this.timeEnd, entry: JSON.parse(JSON.stringify(this.entry)) };
 }

答案 1 :(得分:0)

这似乎可行:

toJSON() {
    return {date: this.date, timeStart: this.timeStart, timeEnd: this.timeEnd, entry: JSON.parse(JSON.stringify(this.entry)) };
}

我可以这样使用它:

his.employeeRef.collection('Entries').add(entry.toJSON());