如何将通过Array.find匹配到的多个对象合并为一个数组?
解决方法:合并匹配的用户对象为单个数组
你当前的问题是循环ID数组时,每次找到匹配对象就单独输出成单元素数组,导致日志里出现多个独立数组。只需先把所有匹配对象收集到一个数组,再统一输出即可。
方案一:保持传入ID的顺序(支持重复ID)
如果需要严格按照传入ID数组的顺序返回结果,甚至保留重复ID对应的对象,可以用map收集所有匹配项,再过滤掉找不到的情况:
function printRecords(ids) { // 遍历ID数组,逐个找到匹配对象 const matchedRecords = ids.map(id => { return studentRecords.find(record => record.id === id); }).filter(record => record !== undefined); // 过滤掉无匹配的ID // 统一输出完整数组 console.log(matchedRecords); }
方案二:更高效的批量匹配(自动去重)
如果不需要严格保持传入ID的顺序,且要避免重复对象,用Set配合filter的写法性能更好,尤其是当studentRecords数据量较大时:
function printRecords(ids) { const idSet = new Set(ids); // 转成Set提升查找效率 // 批量筛选出ID在目标集合中的用户对象 const matchedRecords = studentRecords.filter(record => idSet.has(record.id)); console.log(matchedRecords); }
内容的提问来源于stack exchange,提问作者Tomas Gil Amoedo
相关产品推荐
相关产品推荐

