如何使用JavaScript按masterId过滤并转换指定数组结构?
解决方案:基于
type分组并转换数组结构 你可以用Array.reduce()来实现这个需求——它比单独用filter()更适合做这种聚合转换操作,因为你需要把同类型的数据归组,同时调整结构。下面是完整的实现代码,还兼容了原数据里question字段的拼写错误(比如questio、questionn):
const originalArray = [ { "masterId": 56, "type": "Alcohol Use", "question": "Briefly describe any alcohol use - e.g. how many drinks a week?", "answer": "5 alcohol consumed in a week" }, { "masterId": 57, "type": "Allergies", "questio": "Please list any allergies to medications or food.", "answer": "Skin" }, { "masterId": 56, "type": "Alcohol Use", "questionn": "Which brand?", "answer": "indian Monk" } ]; // 核心分组转换逻辑 const result = Object.values(originalArray.reduce((acc, item) => { // 处理原数据中question字段的拼写错误,确保能拿到正确文本 const questionText = item.question || item.questio || item.questionn; // 用type作为分组的key const groupKey = item.type; // 如果当前分组不存在,初始化分组结构 if (!acc[groupKey]) { acc[groupKey] = { key: groupKey, value: [] }; } // 将当前条目转换为目标格式,添加到对应分组的value数组中 acc[groupKey].value.push({ question: questionText, answer: item.answer }); return acc; }, {})); console.log(result);
步骤拆解
- 用
reduce做分组聚合:reduce()遍历数组每一项,通过累加器(acc)存储分组结果,键是type的值,值是你需要的目标结构。 - 兼容拼写错误:原数据里有
questio、questionn这类错误字段,用||逻辑或操作符兜底,确保能正确提取问题文本。 - 构建目标结构:每遇到一个新的
type,就初始化包含key和value数组的对象;如果type已存在,就把当前的question和answer推到对应分组的value数组里。 - 转换为最终数组:用
Object.values()把累加器对象的所有值提取出来,转换成你需要的数组格式。
内容的提问来源于stack exchange,提问作者Abhith Anto
相关产品推荐
相关产品推荐

