如何将两个JS对象数组处理为按Header字段分组的键值对对象
实现方案
你可以通过reduce+forEach的组合完成需求,逻辑清晰易维护,同时也能保证结果完全匹配headers中定义的Header分类,不会遗漏或多余分类:
// 第一步:基于headers生成初始结果对象,所有Header对应初始空数组 const result = headers.reduce((acc, headerItem) => { acc[headerItem.Header] = [] return acc }, {}) // 第二步:遍历terms数组,按需提取字段推入对应分类 terms.forEach(termItem => { // 仅处理headers中存在的Header,避免非法分类进入结果 if (result[termItem.Header]) { result[termItem.Header].push({ Term: termItem.Term, Definition: termItem.Definition }) } })
如果你想要更精简的写法,也可以把两步合并为一个reduce调用:
const result = terms.reduce((acc, termItem) => { const { Header, Term, Definition } = termItem if (acc[Header]) { acc[Header].push({ Term, Definition }) } return acc // 初始值直接通过headers的reduce生成 }, headers.reduce((initAcc, headerItem) => (initAcc[headerItem.Header] = [], initAcc), {}))
两种写法最终输出的结构完全匹配你要求的格式,你可以直接复制测试。
内容的提问来源于stack exchange,提问作者Jacob Young
相关产品推荐
相关产品推荐

