HarmonyOS鸿蒙Next中对象如何获取所有属性list,如何判断是否包含某个属性

HarmonyOS鸿蒙Next中对象如何获取所有属性list,如何判断是否包含某个属性

let product:WinProductModel = this.dataSourceList[i] as WinProductModel;
for (let j = 0; j < this.tbFuncBean.param?.length; j++) {
  let paramItem:WinFuncBeanParamModel = this.tbFuncBean.param[j] as WinFuncBeanParamModel;
  if (paramItem.gone != '1'){
    let colName = paramItem.col as string;
    if (colName && colName.length > 0){

      let hasName = colName in product;
    let hasName1 = product.hasOwnProperty(colName);
    }
  }
}

想判断product是否有某个属性,let hasName = colName in product; let hasName1 = product.hasOwnProperty(colName); 这两个方法在IDE中都报错,是否还有别的方法来判断啊,或者如何获取一个不固定属性的value,colName不是固定的,ios中可以使用valueForKey取值,鸿蒙有没有类似的方法


更多关于HarmonyOS鸿蒙Next中对象如何获取所有属性list,如何判断是否包含某个属性的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
  1. 在arkts中不允许使用hasOwnProperty这个接口,可以参考一下限制使用标准库,其对此有一些规范说明。

  2. 判断Object中是否含有某个属性,目前可以通过自己封装Object.keys方法实现,参考使用objectkeys判断属性是否存在

更多关于HarmonyOS鸿蒙Next中对象如何获取所有属性list,如何判断是否包含某个属性的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,获取对象所有属性列表可以使用Object.keys(obj)方法,该方法返回对象自身可枚举属性组成的数组。判断是否包含某个属性可使用obj.hasOwnProperty(key)方法或key in obj操作符。前者只检查对象自身属性,后者会检查原型链。示例:

let obj = {a:1, b:2};
let keys = Object.keys(obj); // ['a','b']
let hasA = 'a' in obj; // true

在HarmonyOS Next中,可以使用以下方式获取对象属性和判断属性是否存在:

  1. 获取对象所有属性列表:
const propertyNames = Object.keys(product);
  1. 判断对象是否包含某个属性:
// 方法1:使用in操作符
const hasProperty = colName in product;

// 方法2:使用hasOwnProperty
const hasProperty = Object.prototype.hasOwnProperty.call(product, colName);

// 方法3:使用Reflect
const hasProperty = Reflect.has(product, colName);
  1. 动态获取属性值:
const value = product[colName];
// 或者
const value = Reflect.get(product, colName);

注意:在ArkTS中,类型检查比较严格,如果product是强类型对象,动态属性访问可能会被编译器警告。这种情况下可以考虑:

  1. 使用接口定义可选属性
  2. 使用类型断言
  3. 将对象转为any类型后再访问,
回到顶部