如何解决对象数组属性追加JSON内容时显示[[Object]]的问题
解决合并JSON文件到对象时出现嵌套数组[[Object]]的问题
看起来你遇到的核心问题是把整个数组作为单个元素添加到目标数组中,导致了嵌套结构,进而在打印时出现[[Object]]的简化显示(这是JS控制台对深层嵌套对象的默认压缩展示)。咱们一步步拆解解决:
问题根源分析
你的原逻辑存在格式兼容漏洞:
if (sum[key] == undefined) { sum[key] = x; } else { sum[key].unshift(x); }
当x本身是数组(比如某份JSON文件的内容是数组格式),直接赋值sum[key] = x没问题,但后续unshift(x)会把整个x数组作为单个元素插入到目标数组开头,导致嵌套结构(比如[[...], {...}]),控制台就会用[[Object]]来简化显示这种嵌套对象。
修正后的解决方案
我们需要统一处理x的格式,确保把x中的元素平级添加到目标数组,而不是把x作为整体插入。代码如下:
// 先将x统一转换为数组(兼容单个对象或数组两种格式) const contentItems = Array.isArray(x) ? x : [x]; if (!sum[key]) { // 如果属性不存在,直接初始化数组 sum[key] = [...contentItems]; } else { // 用展开语法把contentItems的元素逐个添加到数组开头 sum[key].unshift(...contentItems); // 若想把新内容加到数组末尾,替换成: // sum[key].push(...contentItems); }
为什么这样有效?
- 格式统一:
Array.isArray(x) ? x : [x]确保不管JSON文件返回的是单个对象还是数组,我们都转换成数组格式处理,避免格式不一致导致的嵌套。 - 平级插入:使用
...contentItems展开语法,把数组中的每个元素单独添加到目标数组中,而不是把整个数组作为单个元素插入,彻底避免嵌套结构。
处理后你的对象会变成预期的结构:
{ DailyTask: [ { title: 'Chores', body: 'Wash the roof and sweep the bed' } ], monday: [ { title: 'Chores', body: '...' }, { title: 'madrid', body: 'Wash the roof and sweep the bed' } ] }
此时控制台打印时就会正常显示所有对象内容,不会再出现[[Object]]的嵌套简化。
内容的提问来源于stack exchange,提问作者Nathaniel Babalola
相关产品推荐
相关产品推荐

