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)
我正在使用 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)