uni-app 【uts】const一个对象,其属性名为其他对象的属性值,这种写法怎么实现?

发布于 1周前 作者 yibo5220 来自 uni-app

uni-app 【uts】const一个对象,其属性名为其他对象的属性值,这种写法怎么实现?

export const DISCOUNT_TYPE = {  
    jutuike: 1,  
}  
export const DISCOUNT_TYPE_PLATFORM = {  
    [DISCOUNT_TYPE.jutuike]: "jutuike"  
}  

19:10:09.625 error: Expecting property name or receiver type  
19:10:09.625 at common/constants.uts:57:2  
19:10:09.625 55 |  }  
19:10:09.625 56 |  export const DISCOUNT_TYPE_PLATFORM = {  
19:10:09.625 57 |   [DISCOUNT_TYPE.getNumber(jutuike)]: "jutuike",  
19:10:09.625    |    ^  
19:10:09.625 59 |  }  
19:10:09.625 error: Property getter or setter expected  
19:10:09.625 at common/constants.uts:57:2  
19:10:09.625 55 |  }  
19:10:09.625 56 |  export const DISCOUNT_TYPE_PLATFORM = {  
19:10:09.625 57 |   [DISCOUNT_TYPE.getNumber(jutuike)]: "jutuike",  
19:10:09.625    |    ^  
19:10:09.625 59 |  }

6 回复

动态key请使用UTSJSONObject或Map


有具体示例不,感谢

回复 kaleidosJohna: 后续会支持该写法:https://issues.dcloud.net.cn/pages/issues/detail?id=6919 临时绕过方案: const DISCOUNT_TYPE_PLATFORM = {} DISCOUNT_TYPE_PLATFORM[DISCOUNT_TYPE.jutuike!] = ‘jutuike’

回复 DCloud_UNI_FengXY: 好的感谢

在uni-app中,你可以使用JavaScript的计算属性名称(computed property names)来创建一个对象,其属性名由其他对象的属性值决定。这通常通过使用方括号([])语法来实现。以下是一个具体的代码案例,展示了如何实现这一功能:

// 假设我们有一个对象,其中包含一些属性名作为值
const propertyNames = {
    firstName: 'first',
    lastName: 'last',
    age: 'years'
};

// 我们希望创建一个新对象,其属性名由 propertyNames 对象的值决定
const values = {
    first: 'John',
    last: 'Doe',
    years: 30
};

// 使用计算属性名称来创建新对象
const user = {};
for (let key in propertyNames) {
    if (propertyNames.hasOwnProperty(key)) {
        const newKey = propertyNames[key];
        user[newKey] = values[newKey];
    }
}

// 输出结果对象
console.log(user);
// 输出: { first: 'John', last: 'Doe', years: 30 }

在这个例子中,我们首先定义了两个对象:propertyNamesvaluespropertyNames 对象中的值将用作新对象 user 的属性名,而 values 对象则提供了相应的属性值。

然后,我们使用一个 for...in 循环遍历 propertyNames 对象。在循环内部,我们检查属性是否是 propertyNames 对象自身的属性(使用 hasOwnProperty 方法),以避免继承属性的干扰。接着,我们使用计算属性名称语法(user[newKey])来动态设置 user 对象的属性。

这种方法非常灵活,允许你根据运行时确定的值来动态创建对象属性。这在处理动态数据结构或需要将数据映射到不同属性名的情况下特别有用。

此外,如果你使用的是ES6或更高版本的JavaScript,你还可以使用 Object.keys()Object.values()Object.entries() 方法来进一步简化代码,或者结合 reduce() 方法来构建对象。不过,上面的例子已经很好地展示了基本的实现方式。

在uni-app中,这种技术同样适用,因为uni-app主要使用Vue.js框架和JavaScript语言进行开发。你可以将上述代码片段直接嵌入到你的uni-app项目中,以实现动态属性名的对象创建。

回到顶部