我有一个
Seq[Byte]
,我需要将其转换为js.Iterable[Byte]
。我有一些代码可以完成这项任务:
import scala.scalajs.js
import scalajs.js.JSConverters.iterableOnceConvertible2JSRichIterableOnce
val src: Seq[Byte] = Seq(1, 2, 3)
val target: js.Iterable[Byte] = src.toJSArray
此代码有效但可能效率不高。
target
可以在没有通过 toJSArray
创建完整数组的情况下懒惰地创建吗?
是的,通过使用原始 Seq 的视图,可以在不通过 toJSArray 创建完整数组的情况下延迟创建目标:
import scala.scalajs.js
import scalajs.js.JSConverters.iterableOnceConvertible2JSRichIterableOnce
val src: Seq[Byte] = Seq(1, 2, 3)
val target: js.Iterable[Byte] = src.view.toJSArray
视图创建了一个惰性迭代器,它只在元素被访问时评估它们,减少内存使用并可能提高性能。
toJSIterable
,由JSConverters
提供,完全满足您的需求:
import scala.scalajs.js
import scala.scalajs.js.JSConverters._
val src: Seq[Byte] = Seq(1, 2, 3)
val target: js.Iterable[Byte] = src.toJSIterable