使用JavaScript合并多个对象报错:concat不是函数求助
问题分析与解决方法
核心问题
- 语法错误:你写出的期望结果不符合JavaScript规范——对象(
{})内部必须是键: 值的结构,不能直接嵌套无键的子对象。你实际需要的是对象数组(用[]包裹)。 - 方法误用:
concat()是数组专属方法,而dif1到dif4都是独立对象,不是数组,直接调用自然会报错"concat不是函数"。
正确实现方式
方式1:直接创建对象数组(最简洁)
用数组字面量直接把所有对象包裹起来,这是最符合你需求的写法:
var dif1 = {name: 'sree', age:'33'}; var dif2 = {name: 'kavitha', age:'34'}; var dif3 = {name: 'darshan', gender:'Male'}; var dif4 = {name: 'suchi', gender:'Female'}; var result = [dif1, dif2, dif3, dif4]; console.log(result);
执行后会得到你想要的结构:
[ {name: 'sree', age:'33'}, {name: 'kavitha', age:'34'}, {name: 'darshan', gender:'Male'}, {name: 'suchi', gender:'Female'} ]
方式2:强行使用concat(仅作演示)
如果一定要用concat,需要先把每个对象放进单独的数组,再执行合并:
var dif1 = {name: 'sree', age:'33'}; var dif2 = {name: 'kavitha', age:'34'}; var dif3 = {name: 'darshan', gender:'Male'}; var dif4 = {name: 'suchi', gender:'Female'}; var result = [dif1].concat([dif2], [dif3], [dif4]); console.log(result);
这种写法没必要,方式1更直接高效。
额外说明:如果需要合并成单个对象(非数组)
如果你误把需求写成了数组,实际是想把所有属性合并到一个对象里(注意name属性会被后面的对象覆盖),可以用以下两种方法:
// 方法1:Object.assign var mergedObj = Object.assign({}, dif1, dif2, dif3, dif4); // 方法2:展开运算符 var mergedObj = {...dif1, ...dif2, ...dif3, ...dif4}; // 结果:{name: 'suchi', age:'34', gender:'Female'}
内容的提问来源于stack exchange,提问作者Sreedhar Kurur
相关产品推荐
相关产品推荐

