如何比较对象数组与字符串数组并返回不匹配元素集合?
解决对象数组与字符串数组的不匹配元素提取问题
需求明确
- 对比对象数组的
value字段与字符串数组元素 - 若对象数组中存在重复的
value值,返回这些value对应的所有name字段 - 若字符串数组中的元素在对象数组的
value里完全找不到匹配,返回该字符串
实现方案
先统计对象数组中每个value的关联信息,再遍历字符串数组分情况处理:
const test = [{name: 'a', value: '1'}, {name: 'd', value: '2'}, {name: 'b', value: '2'}, {name: 'c', value: '3'}]; const strings = ['1', '2','4']; // 构建value到name列表及重复状态的映射 const valueMap = {}; test.forEach(item => { if (!valueMap[item.value]) { valueMap[item.value] = { names: [], isDuplicate: false }; } else { valueMap[item.value].isDuplicate = true; } valueMap[item.value].names.push(item.name); }); // 生成结果集合 const result = []; strings.forEach(str => { const entry = valueMap[str]; if (entry && entry.isDuplicate) { result.push(...entry.names); } else if (!entry) { result.push(str); } }); console.log(result); // 输出: ["d", "b", "4"]
代码说明
- 映射构建:遍历对象数组,用
valueMap记录每个value对应的name数组,同时标记该value是否重复出现 - 结果生成:遍历字符串数组时,若当前字符串对应重复的
value,就把关联的所有name加入结果;若字符串无匹配的value,直接将其加入结果 - 最终结果精准覆盖需求:返回了重复
value对应的name,以及未匹配到的字符串
内容的提问来源于stack exchange,提问作者kuppililakshmi prasanna
相关产品推荐
相关产品推荐

