如何根据createdAt字段过滤数组对象中的customers数据?
实现嵌套对象中customers数据的条件过滤
你可以通过JavaScript的数组map和filter方法结合对象扩展运算符来实现这个需求,核心是遍历嵌套结构并保留符合条件的数据,同时不修改原对象:
const data = { "title": "sunny", "members": [ { "fullname": "rozo", "customers": [ { "name": "test11", "createdAt": 3 }, { "name": "test12", "createdAt": 4 }, { "name": "test13", "createdAt": 5 } ] }, { "fullname": "luffy", "customers": [ { "name": "test6", "createdAt": 9 }, { "name": "test7", "createdAt": 10 }, { "name": "test8", "createdAt": 11 } ] } ] }; // 生成过滤后的新数据 const filteredData = { // 复制原对象的title属性 ...data, // 遍历members数组,处理每个成员的customers members: data.members.map(member => ({ // 复制当前member的fullname等其他属性 ...member, // 过滤customers数组,保留符合条件的项 customers: member.customers.filter(customer => { // 注意:这里根据你给出的期望结果调整为>=4且<=10 // 如果严格按你描述的"大于4且小于10",则改为 customer.createdAt > 4 && customer.createdAt < 10 return customer.createdAt >= 4 && customer.createdAt <= 10; }) })) }; console.log(filteredData);
代码说明:
- 使用
...扩展运算符复制原对象/数组的属性,确保原数据不会被修改,遵循不可变数据的原则 map方法用于遍历members数组,对每个成员进行处理filter方法用于筛选customers数组中符合createdAt条件的对象- 条件部分可按需调整:如果严格按照你描述的“大于4且小于10”,则过滤条件改为
customer.createdAt > 4 && customer.createdAt < 10,此时test12(createdAt=4)和test7(createdAt=10)会被排除
运行上述代码后,得到的结果与你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者Zoro123
相关产品推荐
相关产品推荐

