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

如何筛选必要数据生成含问题与对应标签值的新数组?

问题需求

我有一个包含multiple、single、text三种类型问题的对象,结构如下:

const data = {
    questions: [
        {
            "question": "Question 1",
            "value": [
                "value_1.1.1",
                "value_1.1.2"
            ],
            "type": "multiple",
            "options": [
                {
                    "value": "value_1.1.1",
                    "label": "Value 1.1.1"
                },
                {
                    "textValue":"Additional text value",
                    "value": "value_1.1.2",
                    "label": "Value 1.1.2"
                },
                {
                    "value":"value_1.1.3",
                    "label":"Value 1.1.3",
                }
            ]
        },
        {
            "question": "Question 2",
            "value": "value_2.1.1",
            "type": "single",
            "options": [
                {
                    "value": "value_2.1.1",
                    "label": "Value 2.1.1"
                },
                {
                    "value": "value_2.1.2",
                    "label": "Value 2.1.2"
                },
            ]
        },
        {
            "question":"Question 3",
            "textValue":"Test 12345",
            "type":"text"
        }
    ]
}

需要生成一个新数组,每个元素是包含question和value键的对象,value需满足以下规则:

  • multiple类型:value包含多个选中选项的标签
  • 通过父级value匹配选项的value,获取对应选项的label作为value的内容
  • 若选中的选项包含textValue,需将该值也加入value数组
  • single类型:value是包含选中选项标签的数组
  • text类型:value是包含textValue的数组

最终期望的输出结果:

const newData = [
    {
        question: "Question 1",
        value: ['Value 1.1.1', 'Value 1.1.2', 'Additional text value']
    },
    {
        question: "Question 2",
        value: ['Value 2.1.1']
    },
    {
        question: "Question 3",
        value: ['Test 12345']
    }
];
解决方案

可以通过Array.map()遍历原始问题数组,针对不同类型做处理:

const newData = data.questions.map(question => {
    let value = [];
    switch(question.type) {
        case 'multiple':
        case 'single':
            // 统一处理单选和多选,把选中的value转成数组
            const selectedValues = Array.isArray(question.value) ? question.value : [question.value];
            selectedValues.forEach(val => {
                const option = question.options.find(opt => opt.value === val);
                if (option) {
                    value.push(option.label);
                    // 如果有textValue则追加
                    if (option.textValue) {
                        value.push(option.textValue);
                    }
                }
            });
            break;
        case 'text':
            value.push(question.textValue);
            break;
    }
    return {
        question: question.question,
        value: value
    };
});

console.log(newData);

代码说明

  • 使用map()遍历每个问题,生成目标结构的对象
  • 对multiple和single类型统一处理:将选中的value转为数组,遍历每个选中值,找到对应的选项,添加label,若有textValue则一并添加
  • text类型直接将textValue加入数组
  • 最终返回包含question和处理后value的对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:24