javascript - Push() 覆盖数组中的现有对象
问题描述
所以在我的 js 函数中,我得到了一个数组,我想在每个 for 循环之后添加一个 dayObject。但最终会发生的情况是该数组由相同的 dayObject 组成。push() 方法似乎覆盖了每个条目。我能做些什么?
initModel: function (month, year) {
var days = [];
var mlength = new Date(year, month, 0).getDate();
var dayObject = {
date: null,
enteredhours: "",
timefrom: "",
timeto: "",
comment: ""
};
for (var i = 1; i < mlength; i++) {
var day = new Date();
day.setFullYear(year, month, i);
dayObject.date = day;
days.push(dayObject);
}
return days;
}
解决方案
您可以获取对象的副本以进行推送。这避免了相同的对象引用。
days.push({ ...dayObject });
或者映射一个新数组。
initModel: function (month, year) {
const getDate = day => {
const date = new Date();
date.setFullYear(year, month, day);
return date;
};
return Array.from(
{ length: new Date(year, month, 0).getDate() },
(_, i) => ({
date: getDate(i + 1),
enteredhours: "",
timefrom: "",
timeto: "",
comment: ""
})
);
}
推荐阅读
- node.js - 无论 XXX 是什么,npm start 都会报告“端口 XXX 上已经有东西在运行”
- reactjs - ReactJS:如何正确处理从 food2fork API 获取的数据?
- javascript - 仅当从 Http 服务获取数据时如何显示微调器?
- angular - 离子构建 android 与谷歌服务失败
- javascript - Babel 不会转译子文件夹
- html - 调整大小时如何让我的网站正确缩放?
- java - Amazon Ec2 实例的响应时间很慢
- java - 它不会给我代码错误,MySQLSyntaxErrorException
- visual-studio-code - VSCode Minimap 不工作,是我的机器太旧了吗?
- python - 如何将html标签添加到字符串,避免嵌套标签