JavaScript:如何向数组内单个对象追加新键值对而非新增对象
解决方案
你现在的问题是每次循环都创建新对象并存入数组,导致最终是多个对象的数组。要改成把所有键值对合并到单个对象里,再放到数组中,只需做以下改动:
修正后的完整代码
var mergeRecipient = function(){ var mergeData = {}; // 改成初始化空对象,用来收集所有键值对 $('input:checked').each(function() { var key_ = $(this).attr('name'); var val = $(this).val(); // 这里要修正:原代码取name属性后调用val()是错误的,直接用$(this).val()拿复选框的值 mergeData[key_] = val; // 直接给单个对象添加键值对,不用每次创建新对象 }); // 如果最终需要数组包裹单个对象的结构,就把对象放进数组 var resultArray = [mergeData]; return resultArray; };
关键改动说明
- 把
mergeData的初始化从数组[]改成空对象{},用来集中存储所有键值对 - 循环内不再创建新对象push到数组,而是直接给
mergeData赋值:mergeData[key_] = val - 修复了取值错误:原代码
$(this).attr('name').val()是无效的,因为attr('name')返回的是字符串,没有val()方法,正确写法是$(this).val()获取复选框的选中值
数据结构对比
- 原错误结构:
const dataObj = [{ "jurisdiction": "SCPB - LON" }, { "firstName": "David Dynamic" }];
- 修改后得到的预期结构:
const dataObj = [{ jurisdiction: "SCPB - LON", firstName : "David Dynamic" }];
内容的提问来源于stack exchange,提问作者David Garcia
相关产品推荐
相关产品推荐

