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

JavaScript中获取生成器返回数组最后一个元素的惯用写法是什么

最优实现方案

方案1:ES2022+ 环境(最简洁)

直接用数组at()方法支持负索引的特性,仅调用一次生成器,代码只有一行:

function* getArray() {
  yield* [1, 2, 3];
}
let foo = [...getArray()].at(-1);
console.log(foo); // 3

方案2:兼容旧环境

用立即执行函数(IIFE)包裹逻辑,同样仅调用一次生成器,没有额外全局变量污染:

let foo = (arr => arr[arr.length - 1])([...getArray()]);
console.log(foo); // 3

方案3:大数量场景内存优化

如果生成器返回的元素量极大,不需要把所有元素都展开到数组里占内存,可以直接迭代生成器取最后一个值:

let foo, g = getArray(); for (foo of g);
console.log(foo); // 3

原有写法问题说明

  • 第一种逗号表达式写法报错的原因:用let声明变量时,变量在完成初始化前处于暂时性死区,赋值表达式右侧访问foo会直接抛出引用错误,换成var虽然能运行但不符合现代JS编码规范,不推荐。
  • 第二种写法除了两倍性能开销外,如果生成器内部有副作用(比如修改外部变量、请求外部资源),两次调用的返回结果可能不一致,完全不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:06:07