通常,我们会看到一个数组(IEnumerable)属性,需要提取特定的值。在c#中我们可以做类似的事情:
public AssetModel PromoImage {
get
{
return Assets.FirstOrDefault(x => x.AssetTypeCd == "promoimage");
}
private set { }
}
Angular 2中有没有办法轻松实现这个目标?
答案 0 :(得分:0)
Lodash为LINQ for JavaScript程序提供了类似的功能(然后是一些),尽管不是延迟执行 - LINQ查询在枚举之前被推迟,而lodash(通常)会立即执行查询并返回一个数组/结果对象。 (虽然在这种情况下LINQ甚至不推迟它,因为FirstOrDefault
返回标量而不是可查询/可枚举。)
在你的情况下,你会做这样的事情:
let obj = {
get promoImage() {
return _.find(assets, a => a.assetTypeCd === 'promoimage');
},
// ...
};
然后访问obj.promoImage
将执行该函数以获取属性的值。
(这里我假设这是我们创建新对象的地方,而assets
是构造函数的词法范围中的资产列表。如果你是,你可以将它改为引用this
将数据存储在对象本身而不是构造函数upvalues中。)
注意:
find()
方法,因此一旦采用ES6,该功能将内置于浏览器中。可悲的是,IE(像往常一样)是异常值,没有任何支持。但是,Lodash仍然是一个非常有用的工具包库,请注意Lodash的find()
也可以处理对象,而不仅仅是数组。