HarmonyOS鸿蒙Next中map对象无法取值,报TypeError: is not callable

HarmonyOS鸿蒙Next中map对象无法取值,报TypeError: is not callable

map对象取值

export class CgiUrlsBean {
/**
 * 上次更新时间
 */
newestTime ?: string
/**
 * 域名集合
 */
global ?: GlobalBean
/**
 * 业务接口
 */
urls ?: HashMap<string, UrlsBean>
}

使用时:

let netCgiUrlsBean: CgiUrlsBean = JSON.parse(body)
netCgiUrlsBean.urls?.get('FUND_HMTJLIST')

Map取值时报TypeError: is not callable,应该如何处理


更多关于HarmonyOS鸿蒙Next中map对象无法取值,报TypeError: is not callable的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

可以使用class-transformer将Json字符串反序列化得到的对象转换成ArkTS中类的实例对象

1、引入三方库

ohpm install class-transformer
ohpm install reflect-metadata

2、代码

import { Type, plainToClass } from 'class-transformer'
import "reflect-metadata"
import { CgiUrlsBean } from '../utils/CgiUrlsBean';
import { UrlsBean } from '../utils/UrlsBean';
import { HashMap } from '@kit.ArkTS';

let urlsBeanJson='{"newestTime":"newestTime1","global":{"path":"path1","host":"host1"},"urls":{"key1":{"encryption":"encryption1","isNeedSign":"isNeedSign1"}}}'
let plain: Object = JSON.parse(urlsBeanJson) as CgiUrlsBean;
let album = plainToClass(CgiUrlsBean, plain);

@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Row() {
Column() {
Button('Test')
.onClick(() => {
let urlsMap = album.urls as HashMap<string, UrlsBean>;
let urlsBean: Map<string, UrlsBean> = new Map(Object.entries(urlsMap))
let value: UrlsBean = urlsBean.get("key1") as UrlsBean
console.log("dddd===value=" + value );
console.log("dddd===encryption=" + value.encryption);
})
}
.height('100%')
}
}
}

更多关于HarmonyOS鸿蒙Next中map对象无法取值,报TypeError: is not callable的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


试试

netCgiUrlsBean.urls[‘FUND_HMTJLIST’]

在ArkTS中和javascript的map是一样的,支持两种方式保存数据

方案1、map.set() map.get()

方案2、map[‘a’]=1 ,let abc = map[‘a’]

你那边通过接口返回的数据进行接收时,相当于方案2,所以只能通过[属性名]进行获取。

在HarmonyOS鸿蒙Next中,如果在使用map对象时遇到TypeError: is not callable错误,通常是因为尝试将map对象作为函数调用。map对象在HarmonyOS中是一个集合类型,用于存储键值对,而不是一个可调用的函数。

正确的用法是通过get方法来获取值,而不是直接调用map对象。例如:

let myMap = new Map();
myMap.set('key1', 'value1');
let value = myMap.get('key1'); // 正确用法

如果尝试以下方式调用:

let value = myMap('key1'); // 错误用法

就会抛出TypeError: is not callable错误,因为myMap不是一个函数,不能直接调用。

确保在使用map对象时,使用正确的方法来获取值。检查代码中是否有误将map对象作为函数调用的地方,并修正为使用get方法。

在HarmonyOS鸿蒙Next中,如果遇到map对象无法取值并报TypeError: is not callable错误,通常是因为map对象被错误地当作函数调用。map是一个集合类,应使用get方法来获取值。例如:map.get(key)。检查代码中是否有类似map(key)的调用,并更正为map.get(key)即可解决此问题。

回到顶部