Scala.js - 如何将 Seq 懒惰地转换为 js.Iterable?

问题描述 投票:0回答:2

我有一个

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
创建完整数组的情况下懒惰地创建吗?

scala.js
2个回答
0
投票

是的,通过使用原始 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

视图创建了一个惰性迭代器,它只在元素被访问时评估它们,减少内存使用并可能提高性能。


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.