gpt4 book ai didi

arrays - 如何将数组中对象的属性分配给多个类属性?

转载 作者:行者123 更新时间:2023-12-02 09:37:36 25 4
gpt4 key购买 nike

我有一个带有 2 个私有(private)属性和一个对象数组的 typescript 类。

class AssigningProperties {
private animalType1: string;
private animalType2: string;

animals = [
{
name: "Bob",
type: "cat"
},
{
name: "Max",
type: "dog"
}
];

constructor() {
this.animals.forEach(v => console.log(v.name));
}
}

new AssigningProperties ();

我想将类属性 animalType1 分配给 cat,将 animalType2 分配给 dog,最好使用 Array.foreach.

我可以使用对象的索引来分配它,如下所示:this.animalType1 = this.animals[0].type; 但我觉得有更好的方法。帮忙?

Link to CodeSandBox

最佳答案

你所做的很好,但如果你想在循环中执行它,请将 animalTypes 设为数组:

private animalTypes: string[];

然后您将使用 forEach 回调的第二个参数,它是条目的索引:

this.animals.forEach((v, i) => v.type = this.animalTypes[i]);

或者,如果您的意思是要将 "cat" 分配给第一个 animalTypes(这就是您的 CodeSandbox 代码正在执行的操作),那么:

this.animals.forEach((v, i) => this.animalTypes[i] = v.type);
<小时/>

无论采用哪种方式,您最终都会将类型存储在两个位置,这会带来维护风险 - 您可以更新 animals[0].type 而无需更新 animalType1/animalTypes[0].

假设您希望动物成为事实的唯一来源,您可以使用 getters 来代替:

private get animalType1(): string {
return this.animals[0].type;
}
private get animalType2(): string {
return this.animals[1].type;
}

Live Copy on the playground

或者对于 animalTypes 方法,您可以使用代理:

interface Animal {
name: string;
type: string;
}
class AssigningProperties {
animals: Animal[] = [
{
name: "Bob",
type: "cat"
},
{
name: "Max",
type: "dog"
}
];
private animalTypes = new Proxy<Animal[]>(this.animals, {
get(target, propName) {
if (propName in target) {
return Reflect.get(target, propName).type;
}
return undefined;
}
});
}

Live Copy on the playground

关于arrays - 如何将数组中对象的属性分配给多个类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59562231/

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