如何按group键合并同key关联数组的value值?表单脚本优化
合并表单复选框同group的value字段解决方案
我看你遇到了表单处理的问题——当重复添加包含同名元素的表单区域后,复选框的同group值没法合并,反而生成了多个数组项。咱们来修改脚本实现按group合并value的需求:
修改后的完整脚本
var elem = document.getElementById('rn_QuestionSubmit').elements; var result = {}; for(var i = 0; i < elem.length; i++) { var element = elem[i]; var item = {}; // 处理下拉框的text字段 if (element.type === 'select-one') { item.text = element.options[element.selectedIndex].text; } else { item.text = ''; } item.group = elem[i].dataset.group; if (element.type === 'radio' || element.type === 'checkbox') { if (element.checked) { item.value = element.value; const targetArray = result[element.name] || []; if (element.type === 'checkbox') { // 复选框:查找同group的已有项,合并value const existingItem = targetArray.find(item => item.group === elem[i].dataset.group); if (existingItem) { existingItem.value += `, ${element.value}`; } else { targetArray.push(item); } } else { // 单选框:直接添加(同name下只会有一个选中项) targetArray.push(item); } result[element.name] = targetArray; } } else { // 处理其他表单元素 item.value = element.value; if (result[element.name]) { result[element.name].push(item); } else { result[element.name] = [item]; } } } const finalResult = JSON.stringify(result); console.log(`[${finalResult}]`); return `[${finalResult}]`;
关键改动说明
- 复选框合并逻辑:针对复选框,在存入对应
name的数组前,先通过find方法查找是否已有相同group的项。如果存在,就将当前选中的value以逗号加空格的格式追加到已有项的value中;如果不存在,再添加新的item到数组里。 - 单选框保留原有逻辑:因为单选框同
name下只会有一个选中项,所以保持原有的添加逻辑即可。 - 代码优化:将
targetArray提前定义,避免重复判断result[element.name],让代码更简洁。
这样处理后,当你添加同group的复选框条目时,就会得到你想要的合并结果:
"support_advice": [{ "text": "", "group": "check_lifestyle_26", "value": "Physical activity & Exercise, Overall General Health & Wellbeing" }]
内容的提问来源于stack exchange,提问作者pee2pee
相关产品推荐
相关产品推荐

