JavaScript如何将对象数组作为指定键属性添加到目标对象中
问题原因
你得到双层嵌套数组的核心原因是Array.push()会将传入的参数作为单个元素追加到数组末尾。你传入的arrObj本身就是数组类型,会被当做整体塞入初始为空的level数组,自然就出现了多余的一层嵌套。
正确实现方式
下面几种写法都能得到你预期的结构,根据实际场景选择即可:
- 定义对象时直接赋值(最简洁,推荐)
var obj = { name: $('#name').val(), // 注意:原代码中$('age')是标签选择器,如果要取id为age的输入框值,需要写成$('#age'),否则会取不到值 age: $('#age').val(), level: arrObj };
- 对象定义完成后追加属性
如果你是在obj创建完成后,才需要把arrObj绑定到level键上,直接赋值即可:
// 初始定义的obj var obj = { name: $('#name').val(), age: $('#age').val() }; // 后续追加属性,两种写法等价 obj.level = arrObj; // obj['level'] = arrObj;
- 保留level原有元素的场景
如果你的level数组本来就存在其他初始元素,需要把arrObj里的每一项追加进去而不是整体替换,可以用展开运算符:
var obj = { name: $('#name').val(), age: $('#age').val(), level: [/* 这里可以放已有的level元素 */] }; // 把arrObj里的每个元素逐个追加到level数组中,不会产生嵌套 obj.level.push(...arrObj);
写法差异说明
- 错误写法
obj.level.push(arrObj):最终level数组长度为1,唯一元素就是arrObj本身,会产生嵌套 - 直接赋值写法:level直接指向arrObj数组,完全匹配你要的结构,性能最好
- 展开push写法:会遍历arrObj把元素逐个追加,适合需要保留level原有内容的场景
内容的提问来源于stack exchange,提问作者Tomato
相关产品推荐
相关产品推荐

