在 HarmonyOS Next 开发中,如果你不能使用 TypeScript 或 JavaScript 的标准库,包括 hasOwnProperty
和通过 []
或 .
获取对象的属性值,那么你需要寻找其他方法来将对象转换为 Map
。
由于 ArkTS
对动态特性的限制,你可以考虑使用递归函数来遍历对象的属性,并将它们添加到 Map
中。下面是一个可能的实现:
function objectToMap(obj: any): Map<string, any> {
const map = new Map<string, any>();
// 递归函数,用于遍历对象的属性
function traverse(obj: any, parentKey?: string) {
for (const key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
// 如果值是对象,则递归遍历
traverse(obj[key], parentKey ? `${parentKey}.${key}` : key);
} else {
// 如果值是基本类型,则添加到 Map 中
map.set(parentKey ? `${parentKey}.${key}` : key, obj[key]);
}
}
}
// 调用递归函数,开始遍历对象
traverse(obj);
return map;
}
// 使用示例
const obj = {
name: 'John',
age: 30,
address: {
city: 'New York',
zipCode: '10001'
}
};
const map = objectToMap(obj);
console.log(map);
这个 objectToMap
函数使用了一个递归函数 traverse
来遍历对象的属性。如果属性的值是一个对象,它会递归地调用自己;如果属性的值是基本类型,它会将该属性及其值添加到 Map
中。这样,即使不能使用 hasOwnProperty
或通过 []
或 .
获取属性值,也能将对象转换为 Map
。
使用 Object.entries() 和 Map 构造函数来转为map,亲测有效: