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

TypeScript中Array.push()链式调用返回值不符合预期问题

问题原因

你的写法错误本质是误解了Array.prototype.push()的返回值规则:

  • push 方法会直接修改原数组,给数组末尾追加元素,但它的返回值不是修改后的数组,而是追加元素后数组的新长度值(数字类型)。
  • 你写的const sourceFieldsArray = toArray(sourceFieldsObject).push(non_searchFieldsNames.id); 执行逻辑是:先运行toArray得到长度为6的目标数组,调用push追加1个元素后,方法返回数字7,你最终把这个数字7赋值给了变量,自然得不到预期的数组。
  • 拆分两行能正常运行,是因为第一行已经把数组本身的引用存到了变量里,第二行调用push只是修改变量指向的数组内容,变量始终持有数组引用,所以结果符合预期。你尝试的给toArray调用加括号的写法,只是调整了运算优先级,最终赋值的还是push的返回值(数字长度),当然解决不了问题。
正确单行写法

推荐使用无副作用的方式生成新数组,代码更简洁易读:

  • 展开运算符实现:
const sourceFieldsArray = [...toArray(sourceFieldsObject), non_searchFieldsNames.id];
  • concat方法实现:
const sourceFieldsArray = toArray(sourceFieldsObject).concat(non_searchFieldsNames.id);

如果一定要使用push方法,也可以通过立即执行函数包裹实现,但这种写法可读性差,日常开发不推荐:

const sourceFieldsArray = (arr => (arr.push(non_searchFieldsNames.id), arr))(toArray(sourceFieldsObject));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:48:09