JS:变量正在更改,我不知道为什么

时间:2019-09-18 08:33:41

标签: javascript node.js

请原谅标题,我不知道该如何形容。我遇到了一个问题,我的代码更改了变量,没有任何业务变化,我不知道为什么。

代码:

getCalendar (parameters, callback) {
    var returnData = this.calendars

    // If limit parameter is set, remove all but n events
    if (parameters.limit) {
      returnData.forEach((calendar) => {
        calendar.events = calendar.events.slice(0, parameters.limit)
      })
    }
    callback(returnData)
  }

this.calendars填充有以下所示的数据。 该代码应返回this.calendars的副本,事件数受parameter.limit限制。这确实可以按预期工作,但是此代码也以某种方式从this.calendars中删除了事件。因此,如果我在将parameters.limit设置为3的情况下运行代码,然后再次将parameters.limit设置为5的代码,则两次都将返回3个事件。

这是一个重要的节点应用程序。

this.calendars

[
  {
    id: '5e29843erkjfassfv1h8@group.calendar.google.com',
    lastUpdate: '2019-09-18T10:16:32+02:00',
    summary: 'Calendar1',
    description: 'Description',
    timeZone: 'Europe/Oslo',
    updated: '2019-09-11T00:09:34.954Z',
    events: [ [Object] ]
  },
  {
    id: 'd3llqgg43irfkcf8pjfe8@group.calendar.google.com',
    lastUpdate: '2019-09-18T10:16:32+02:00',
    summary: 'Calendar 2',
    description: 'Description',
    timeZone: 'Europe/Oslo',
    updated: '2019-09-16T16:36:41.373Z',
    events: [
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object],
      [Object], [Object], [Object]
    ]
  }
]

1 个答案:

答案 0 :(得分:0)

您正在创建 this.calendars 的浅表副本,因此,当您更改 returnData 时,它也会同时更改 this.calendars 。试试这个。

var returnData = JSON.parse(JSON.stringify(this.calendars))