更改从对象复制的日期

时间:2017-04-03 16:02:50

标签: javascript

我正在尝试从对象复制日期属性并按如下所示进行修改,但每次我尝试修改'复制'日期属性时,我最终都会修改对象日期属性。所以有人想知道有没有办法可以修改复制的日期而不影响原始对象中的日期属性?任何有关示例代码的帮助都非常感谢。感谢

一个。对象(保存在taskObject var中)

{ name: 'test',
  endDate: Thu Apr 13 2017 18:46:02 GMT+0200 (EET)
}

B中。代码:

let currentTaskEndDate = taskObject.endDate; //where taskObject is the object above

//The following line will result in taskObject.endDate to be updated by new date!
currentTaskEndDate.setDate(currentTaskEndDate.getDate() + Number(5)); 

3 个答案:

答案 0 :(得分:1)

在修改日期之前使用new Date(taskObject.endDate)创建日期的副本:

const origDate = new Date(2017, 3, 13, 16, 46, 2);

const taskObject = {
  name: 'test',
  endDate: origDate,
};

console.log('taskObject:', taskObject);

// Copy the original Date object before modifying it
const currentTaskEndDateCopy = new Date(taskObject.endDate);
currentTaskEndDateCopy.setDate(currentTaskEndDateCopy.getDate() + 5);

console.log('New Date object:', currentTaskEndDateCopy);
console.log('taskObject (unchanged!):', taskObject);
.as-console-wrapper{min-height:100%}

答案 1 :(得分:1)

正如@yBrodsky所提到的,使用新的Date对象并修改它:

例如,您可以执行以下操作:

let currentTaskEndDate = new Date(taskObject.endDate);
currentTaskEndDate.setDate(currentTaskEndDate.getDate() + 5);

答案 2 :(得分:-1)

以这种方式复制对象时,JavaScript passes a reference为原始值。

如果要复制没有引用的值,则需要执行deep clone。从lodash

查看_.cloneDeep