JavaScript:如何将对象数组正确推入对象属性以避免嵌套数组或仅添加单个对象
解决对象数组推入问题
嘿,我明白你的困扰了——要么只能加单个对象,要么就得到嵌套数组,确实挺烦人的。其实问题出在push方法的使用方式上,我给你两个简单的解决方案:
方法一:使用展开语法(推荐)
push方法如果直接传入整个数组,会把数组当作单个元素塞进去,导致嵌套。而用**展开运算符...**可以把数组里的每个元素单独传给push,这样就正好把所有元素平放进items数组里:
// 直接展开myArray的所有元素推入items myObject.items.push(...myArray);
这样执行后,myObject.items就会变成[{id:1}, {id:2}, {id:3}](注:这里我默认你原数组里的对象是合法的键值对,原写法{1}在JS里是语法错误,对象需要明确的键值关系哦)。
方法二:使用concat方法
如果你不想修改原数组(或者更习惯这种写法),可以用concat,它会返回一个合并后的新数组,再把新数组赋值给items即可:
// 合并原items和myArray,返回新数组并赋值 myObject.items = myObject.items.concat(myArray);
不过要注意,concat不会修改原数组,所以必须重新赋值;而第一种方法是直接修改原数组,性能更优。
为什么你之前的方法不行?
- 用
myObject.items.push(myArray):push把整个myArray当作一个元素,所以items变成[ [{id:1}, {id:2}, {id:3}] ],也就是嵌套数组。 - 用
myObject.items.push(myArray[0]):你只传入了数组的第一个元素,自然只能添加单个对象。
完整示例代码
// 初始化合法的对象和数组 const id = 123; const myObject = { id: id, items: [], boolean: true }; const myArray = [{ id: 1 }, { id: 2 }, { id: 3 }]; // 用展开语法推入所有元素 myObject.items.push(...myArray); console.log(myObject); // 输出:{ id: 123, items: [ { id: 1 }, { id: 2 }, { id: 3 } ], boolean: true }
内容的提问来源于stack exchange,提问作者Dima Malko
相关产品推荐
相关产品推荐

