如何根据指定accountSoftwareRegUid列表筛选Datasource对象数组中的记录
筛选逻辑实现方案(JavaScript版)
实现逻辑说明
- 首先将待匹配的uid列表转换为Set结构,O(1)时间复杂度即可完成存在性校验,相比数组遍历查询性能更高
- 遍历原数据源的所有外层键,对每个键对应的记录数组做过滤,仅保留
accountSoftwareRegUid属于匹配集合的记录 - 过滤后如果对应分组的数组为空,直接剔除该外层键,最终返回保留原有结构的筛选结果
可运行代码示例
// 原数据源 const Datasource = { "A": [ {"accountSoftwareRegUid":1792690,"accountUid":646882,"registrationIdOrOrderItemID":"Not Required For Eval JZ399AAE","registrationType":"RegistrationId"}, {"accountSoftwareRegUid":1792691,"accountUid":646882,"registrationIdOrOrderItemID":"Not Required For Eval JZ400AAE","registrationType":"RegistrationId"}, {"accountSoftwareRegUid":1792691,"accountUid":646882,"registrationIdOrOrderItemID":"Not Required For Eval JZ400AAE","registrationType":"RegistrationId"} ], "B": [ {"accountSoftwareRegUid":832633,"accountUid":719261,"registrationIdOrOrderItemID":"1168738","registrationType":"order","passPhrase":"AR0005493ARB"}, {"accountSoftwareRegUid":832675,"accountUid":719261,"registrationIdOrOrderItemID":"1168739","registrationType":"order","passPhrase":"AR0005493ARB"} ], "C": [ {"accountSoftwareRegUid":651923,"accountUid":646882,"registrationIdOrOrderItemID":"1384120","registrationType":"order","passPhrase":null,"organisationName":"flyasiana"}, {"accountSoftwareRegUid":637694,"accountUid":646882,"registrationIdOrOrderItemID":"1116033","registrationType":"order","passPhrase":null,"organisationName":"korea Correctional Service"} ] }; // 待匹配uid列表 const matchUids = [1792690, 832633]; // 转换为Set提升查询效率 const uidSet = new Set(matchUids); // 执行筛选 const filteredResult = Object.fromEntries( Object.entries(Datasource) .map(([key, list]) => { // 过滤当前分组下符合条件的记录 const filteredList = list.filter(item => uidSet.has(item.accountSoftwareRegUid)); return [key, filteredList]; }) // 剔除没有匹配记录的空分组 .filter(([_, list]) => list.length > 0) ); console.log(filteredResult);
运行上述代码得到的输出与你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者user8837476
相关产品推荐
相关产品推荐

