JavaScript中遍历对象数组并修改指定键对应值的方法
问题解决:将过滤条件中的日期字符串转为Date对象
原始输入的过滤数组:
[ { createdDateTime: { '$gte': '2023-02-08T00:00:00.000Z', '$lte': '2023-05-09T23:59:59.000Z' } }, { user: 'customer' } ]
期望转换后的数组:
[ { createdDateTime: { '$gte': new Date('2023-02-08T00:00:00.000Z'), '$lte': new Date('2023-05-09T23:59:59.000Z') } }, { user: 'customer' } ]
用户已尝试的代码:
var check = filtersFromRequest.some(obj => obj.hasOwnProperty("createdDateTime")); if(check){ // stuck here as what to do , }
解决方案
你可以通过定位到包含createdDateTime的对象,将其内部的日期字符串转为Date实例,以下是两种常用实现方式:
方式一:直接修改原数组
适合允许改动原数据的场景:
// 找到包含createdDateTime的目标对象 const dateFilter = filtersFromRequest.find(obj => obj.hasOwnProperty("createdDateTime")); if (dateFilter) { // 遍历日期属性,转换为Date对象 const dateProps = dateFilter.createdDateTime; for (const key in dateProps) { if (dateProps.hasOwnProperty(key)) { dateProps[key] = new Date(dateProps[key]); } } }
方式二:创建新数组(不修改原数组)
适合需要保留原数组的场景,使用扩展运算符复制对象避免副作用:
const updatedFilters = filtersFromRequest.map(obj => { if (obj.hasOwnProperty("createdDateTime")) { return { ...obj, createdDateTime: { ...obj.createdDateTime, '$gte': new Date(obj.createdDateTime['$gte']), '$lte': new Date(obj.createdDateTime['$lte']) } }; } // 其他过滤条件直接返回原对象 return obj; });
内容的提问来源于stack exchange,提问作者Sindhu1990
相关产品推荐
相关产品推荐

