You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中数组赋值给对象属性仅保留首个元素是什么原因?

问题原因分析

你提供的测试代码本身运行后groupedDepActivities[0].term_activity.terms必然是长度为3的数组,出现仅保留第一个元素的情况,常见原因如下:

  • 后续代码修改了terms数组:在push操作执行后、打印操作执行前,有其他逻辑对groupedDepActivities[0].term_activity.terms做了截断、过滤或重赋值,比如使用splice(1)、slice(0,1)方法,或者错误的将数组第一个元素直接赋值给了terms属性。
  • 控制台打印的延迟求值特性误导:浏览器控制台的console.log打印的是对象的引用,展开对象时才会读取最新的属性值,如果在打印后修改了terms数组,就会出现打印时显示的长度和展开后的长度不一致的问题。
  • 真实业务逻辑和测试代码不一致:如果你的实际项目中terms数组是从接口响应、第三方函数返回值获取的,很可能上游返回的数组本身就只有第一个元素,你写的硬编码测试案例和真实运行的赋值逻辑不符。
  • 自定义序列化逻辑截断数组:如果赋值前对数据做了序列化/反序列化操作,对应对象上自定义的toJSON方法会在序列化时只保留第一个元素。
解决方法
  • 首先在push操作的下一行立刻执行console.log(JSON.stringify(groupedDepActivities[0].term_activity.terms)),用序列化后的结果验证数组初始长度,避免控制台引用延迟的干扰。如果打印结果包含3个元素,即可确定问题出在后续的修改代码。
  • 排查所有操作terms数组的逻辑,重点检查赋值语句是否错误将数组元素赋值给terms属性,而非整个数组,比如错误写法terms = res.data.terms[0],正确写法为terms = res.data.terms。
  • 如果terms取值自接口,先打印接口返回的原始数据,确认上游返回的数组长度符合预期。
  • 检查所有涉及该对象的克隆、序列化操作,确认没有自定义逻辑截断数组。

内容的提问来源于stack exchange,提问作者Getaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:54:05