ScalaJS:查找存储为 js.Dynamic 的数组的长度

ScalaJS: Find the length of an array stored as js.Dynamic

我正在使用 Scala.JS 和 Akka.JS 来了解客户端、基于参与者的应用程序。当用户从国家列表中选择一个国家时,将构建该国家/地区的城市列表。这部分工作正常。

但是,有些国家被列为只有一个城市(例如香港只包含香港),所以当我显示城市列表时,我想先检查城市列表的长度(是 js.Dynamic 类型)。如果它 >1,我将在下拉列表中添加一个不可选择的占位符 "Select a city",然后构建城市列表。只要我随意这样做,一切都很好。

尽管我可以很高兴地 map 跨越类型 cityList 的函数 js.Dynamic,但似乎测试 cityList 的长度是不是可以直接完成的事情,即使 cities JSON 对象是一个数组:

"cities": [
    {
      "cityName": "Parròquia de Sant Julià de Lòria",
      "cityId": 3039162,
      "coords": {
        "lon": 1.48247,
        "lat": 42.462471
      }
    },
    {
      "cityName": "Pas de la Casa",
      "cityId": 3039604,
      "coords": {
        "lon": 1.73361,
        "lat": 42.54277
      }
    },

如果我尝试:

if (cityList.length == 1)

if (cityList.size == 1)

然后我得到编译警告 js.Dynamic and Int are unrelated 等不能比较相等,如果我尝试

if (cityList.size.asInstanceOf[Int] == 1)

if (cityList.length.asInstanceOf[Int] == 1)

这总是失败,因为 Int 不是 undefined 的成员。

终于,我试过了

if ((cityList.asInstanceOf[Seq[js.Dynamic]]).size == 1)

但是 [object Object] is not an instance of scala.collection.Seq

如何在不首先将 js.Dynamic 卸载到其他数据结构中的情况下获取它的长度(我想避免这种情况,因为这是对数据的双重处理)?

克里斯·W

嗯,我确定我试过了,但正如 srjd 指出的那样,正确答案 if (cityList.length.asInstanceOf[Int] == 1)