You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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);

步骤拆解

  1. 用reduce做分组聚合:reduce()遍历数组每一项,通过累加器(acc)存储分组结果,键是type的值,值是你需要的目标结构。
  2. 兼容拼写错误:原数据里有questio、questionn这类错误字段,用||逻辑或操作符兜底,确保能正确提取问题文本。
  3. 构建目标结构:每遇到一个新的type,就初始化包含key和value数组的对象;如果type已存在,就把当前的question和answer推到对应分组的value数组里。
  4. 转换为最终数组:用Object.values()把累加器对象的所有值提取出来,转换成你需要的数组格式。

内容的提问来源于stack exchange,提问作者Abhith Anto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:50:25