gpt4 book ai didi

JavaScript( typescript /Angular ): Shortest/Fastest method to set object keys/values based on previous logic?

转载 作者:行者123 更新时间:2023-11-30 15:06:29 25 4
gpt4 key购买 nike

我试图用对象填充一个数组,其中的对象都是相同的,并且键是根据预定义的项目确定的。我知道我可以用多个 if...else 来做到这一点,但这似乎是一个很长的使用方法,我希望在不使用外部库的情况下得到更简洁和/或更高效的东西。

用硬编码对象填充数组的当前方法:

fillArray(arr,n) {
while(arr.length < n) {
arr.push({
'x': Math.round(Math.random(),
'name': 'item' + arr.length + 1
});
}
}

我想使用 if 实现的示例:

fillArray(arr, n, type) {
while(arr.length < n) {
if ( type === 'type1' ) {
arr.push({
'x': Math.round(Math.random(),
'name': 'item' + arr.length + 1
});
} else if ( type === 'type2') {
arr.push({
'x': Math.round(Math.random(),
'y': Math.round(Math.random(),
'name': 'item' + arr.length + 1
});
}
}
}

在我的应用程序中,我将对十几个 if 项使用这种类型的方法,并且还会有类似的方法。我希望对这些项目应用任何静态类型,因为我的应用程序可能需要动态添加对象键。

我有一个想法,但我似乎无法在脑海中形成一个完整的想法,那就是以某种方式预先定义一个对象数组,然后使用查找以某种方式将数组中的每个项目作为一个类型应用。

伪代码(未经测试):

myTypes = [{
type: 'type1', keys: ['x', 'name']},
{type: 'type2', keys: ['x', 'y', 'name']
}];
fillArray(arr,n, type) {
let currentType = this.myTypes.find( myTypes => myTypes.type === type).keys
while(arr.length < n) {
// add for loop to iterate over each key/value here separately
}
}

这种方法是否有效,是否有效,是否是这种方法的合理实践?对于这种使用动态键的数组填充,是否有任何其他标准做法?

最佳答案

使用 keys 之类的对象移动到动态属性会损害类型安全。由于 TypeScript 是一种主要语言,因此这是一个重要的问题。此外,keys 不允许控制属性值。

它可以是类的层次结构或一些工厂函数:

class Type1 {
x = ...;
name = ...;
}

class Type2 extends Type1 {
y = ...;
}

const typesMap = { type1: Type1, type2: Type2 };

fillArray(arr, n, type) {
while(arr.length < n) {
arr.push(new typesMap[type])
}
}

与原始代码的不同之处在于,如果 type 不正确或丢失,它将无法正常工作,这可能是合意的,也可能不是合意的。

关于JavaScript( typescript /Angular ): Shortest/Fastest method to set object keys/values based on previous logic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45684561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com