2017-01-03 3 views
0

Часто нам присваивается свойство array (IEnumerable), которое необходимо выделить конкретным значениям. в C# мы можем сделать что-то похожее на:Угловое свойство свойства linq style

public AssetModel PromoImage { 
     get 
     { 
      return Assets.FirstOrDefault(x => x.AssetTypeCd == "promoimage"); 
     } 
     private set { } 
    } 

Есть ли способ легко добраться до этого в пределах углового 2?

ответ

0

Lodash предоставляет аналогичную функциональность LINQ для программ JavaScript (а затем некоторые), хотя и не отложенное выполнение. Запросы LINQ откладываются до тех пор, пока они не будут перечислены, в то время как lodash (обычно) немедленно выполняет запрос и возвращает массив/объект Результаты. (Хотя в данном случае LINQ не будет даже отложить его, поскольку FirstOrDefault возвращает скаляр, а не запрашиваемый/перечислит.)

В вашем случае, вы могли бы сделать что-то вроде этого:

let obj = { 
    get promoImage() { 
     return _.find(assets, a => a.assetTypeCd === 'promoimage'); 
    }, 

    // ... 
}; 

Тогда obj.promoImage доступа будет выполнять функцию для получения значения атрибута.

(Здесь я предполагаю, что это, где мы создаем новый объект, и assets список активов в лексической области видимости функции конструктора. Вы можете изменить его, чтобы ссылаться на this, если вы храните данные на самом объекте и . не в конструкторах upvalues)


Примечания:

  • Lodash не зависит от Угловая вообще.
  • ES6 предоставляет метод find() в прототипе Array, поэтому эта функция будет встроена в браузеры после принятия ES6. К сожалению, IE является (как обычно) outlier без какой-либо поддержки для него. Тем не менее, Lodash по-прежнему очень полезная библиотека, чтобы иметь в вашем наборе инструментов, и обратите внимание, что Lodash's find() работает и с объектами, а не только с массивами.
Смежные вопросы