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

时间:2017-12-08 13:52:29

标签: arrays json scala.js

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

但是,有些国家被列为只有一个城市(EG香港只包含香港),所以当我显示城市列表时,我首先要查看城市列表的长度(即输入js.Dynamic)。如果> 1,我会在下拉列表中添加一个不可选择的占位符“选择一个城市”,然后构建城市列表。只要我随意做这件事,一切正常。

尽管我可以非常高兴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卸载到其他一些数据结构中(我想避免,因为那是双重处理数据),我如何获得from nltk.corpus import wordnet syns = wordnet.synsets("goat") print(syns[0].definition()) 的长度?

Chris W

1 个答案:

答案 0 :(得分:0)

嗯,我确定我试过这个,但正如srjd指出的那样,正确答案obj.subsections = _toArray(obj.subsections);