如何修改对象数组中的日期字段并替换原数据?
解决方法:修改数组对象中的日期字段并替换原值
首先,咱们来看你当前代码的问题:你把截取后的日期存入了一个新的date数组,然后又把这个数组追加到了$scope.sessions末尾,这就导致原数组最后多了一个包含所有短日期的数组元素,而不是修改每个对象里的date字段。
正确的做法:直接修改每个对象的date字段
你只需要在循环里直接操作数组中的每个对象,替换它的date属性即可,不需要额外的数组来存储。比如:
const getSessions = () => { loginService.getUser().then((response) => { const user_id = response.data.id; console.log("getUser returning this => ", response.data); loginService.getUserSessions(user_id).then((response) => { $scope.sessions = response.data; // 循环每个会话对象,直接修改date字段 for (let i = 0; i < $scope.sessions.length; i++) { // 注意:你代码里写的是next_class,这里假设实际是date字段,根据你的需求调整 $scope.sessions[i].date = $scope.sessions[i].date.slice(0, 10); } console.log($scope.sessions); // 现在每个对象的date已经是短格式了 }); }); };
更健壮的日期处理方式(可选)
如果你的日期格式可能有变动,或者想避免直接字符串截取的局限性,可以用Date对象来处理,确保格式正确:
for (let i = 0; i < $scope.sessions.length; i++) { const dateObj = new Date($scope.sessions[i].date); // 格式化YYYY-MM-DD const formattedDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, '0')}-${String(dateObj.getDate()).padStart(2, '0')}`; $scope.sessions[i].date = formattedDate; }
为什么你的原代码不行?
date.push(...)是把截取的日期一个个加到date数组里$scope.sessions.push(date)是把整个date数组作为一个新元素添加到$scope.sessions的最后,而不是修改原有对象的属性
这样修改后,你的$scope.sessions数组里的每个对象都会保留原有的其他字段,同时date字段被替换成了你想要的短格式。
内容的提问来源于stack exchange,提问作者J. Perk
相关产品推荐
相关产品推荐

