我有一个看起来像这样的课程
class Types {
static type1 = {name: 'car', isCool: true};
static type2 = {name: 'house', isCool: false};
static type3 = {name: 'tree', isCool: true};
}
现在我想获得所有具有该属性的类型' isCool'设为true。 目前,每当我需要它时,我都会在课堂上进行迭代。
我不想每次都重新计算它。此类也将在一个单独的文件中,我将在多个位置导入,我只想计算一次数组。 怎么办呢?
答案 0 :(得分:1)
您可以计算一次并将其存储,以便不再计算:
class Types {
private static COOL_NAMES: string[];
static type1 = { name: 'car', isCool: true };
static type2 = { name: 'house', isCool: false };
static type3 = { name: 'tree', isCool: true };
static getCoolNames(): string[] {
if (this.COOL_NAMES) {
return this.COOL_NAMES;
}
this.COOL_NAMES = [];
Object.keys(this).forEach(name => {
if (this[name].isCool) {
this.COOL_NAMES.push(name);
}
});
return this.COOL_NAMES;
}
}
答案 1 :(得分:0)
首先,将类型存储在数组中而不是单独的成员似乎更好 - 它会让您的生活更轻松,也更符合逻辑。
其次,您不必使用forEach
循环迭代它们,您可以使用filter
。
最后,您可以将计算存储在成员中,这样您就可以读取它而不是每次都运行计算。
class Types {
static types = [{name: 'car', isCool: true},
{name: 'house', isCool: false},
{name: 'tree', isCool: true}];
public static coolName = this.getCoolNames();
public static getCoolNames() {
return this.types.filter((type) => type.isCool);
}
}