请求实现:基于label字段匹配输入载荷,生成含id和role的目标输出
实现基于label字段(忽略大小写)的跨数据集匹配与字段提取
输入输出示例
输入1(角色映射数据)
{ "labelItems": [{ "label": "manager", "role": "MA" }, { "label": "Developer", "role": "DEV" }] }
输入2(带ID的标签数据)
{ "List": [{ "id": "M123", "label": "Manager" }, { "id": "L240", "label": "Lead" }, { "id": "D250", "label": "Developer" } ] }
目标输出
{ "Labels": [{ "id": "M123", "role": "MA" }, { "id": "D250", "role": "DEV" } ] }
实现思路
- 先把输入1的
labelItems转换成小写label为键、role为值的映射表,快速定位匹配的角色。 - 遍历输入2的
List数组,将每个元素的label转成小写后去映射表中查找对应role。 - 找到匹配项时,提取该元素的
id和对应的role,组合成新对象加入结果数组。 - 最后把结果数组包装成
{ "Labels": [...] }的结构。
代码实现(JavaScript)
function matchLabels(input1, input2) { // 构建小写label到role的映射表 const roleMap = input1.labelItems.reduce((map, item) => { map[item.label.toLowerCase()] = item.role; return map; }, {}); // 筛选匹配项并生成结果 const matchedLabels = input2.List .filter(item => roleMap.hasOwnProperty(item.label.toLowerCase())) .map(item => ({ id: item.id, role: roleMap[item.label.toLowerCase()] })); return { Labels: matchedLabels }; } // 测试用例 const input1 = { "labelItems": [{ "label": "manager", "role": "MA" }, { "label": "Developer", "role": "DEV" }] }; const input2 = { "List": [{ "id": "M123", "label": "Manager" }, { "id": "L240", "label": "Lead" }, { "id": "D250", "label": "Developer" } ] }; console.log(matchLabels(input1, input2));
关键说明
- 用
reduce构建映射表,把查找操作的时间复杂度降到O(1),处理大数据集时效率更高。 - 所有label都转成小写后再匹配,彻底忽略大小写差异。
- 先过滤再映射,只保留有对应role的项,避免生成无效数据。
内容的提问来源于stack exchange,提问作者deepuKumar
相关产品推荐
相关产品推荐

