如何遍历对象数组,统一嵌套request.createdAt的日期格式?
解决数组中嵌套日期属性转时间戳的问题
你的原代码问题出在几个关键地方:
- 第二个
map里的变量e已经脱离了第一个map的作用域,根本取不到值,所以会返回undefined或者报错 - 逻辑拆分太零散,先提取属性再过滤再处理,不仅冗余还没达到修改目标对象的目的
下面是更简洁且有效的实现方式:
推荐方案(不修改原数组,返回新数组)
这种方式不会改动原数据,避免意外副作用:
const processedArr = arr.map(item => { // 浅拷贝原对象,如需处理更深层级可改用structuredClone做深拷贝 const newItem = {...item}; // 检查是否存在嵌套的request.createdAt属性 if (newItem.request?.createdAt) { // 把日期字符串转成毫秒级时间戳,和第一个对象格式一致 newItem.request.createdAt = Date.parse(newItem.request.createdAt); } return newItem; });
直接修改原数组(不推荐,会产生副作用)
如果不需要保留原数组的原始状态,可以直接遍历修改:
arr.forEach(item => { if (item.request?.createdAt) { item.request.createdAt = Date.parse(item.request.createdAt); } });
原代码问题详解
你之前的代码执行流程完全偏离预期:
- 第一个
map生成数组[undefined, "2022-11-09 17:26:51 UTC"] filter后只剩日期字符串,得到["2022-11-09 17:26:51 UTC"]- 第二个
map里的e是未定义的,所以e?.request为假,返回null,最终得到[null]
内容的提问来源于stack exchange,提问作者seanberlin
相关产品推荐
相关产品推荐

