2014-11-20 1 views
1

Когда у меня есть поток объектов, например.Как фильтровать поток, используя короткий синтаксис, когда значения являются примитивами

values = Bacon.fromArray([ {'status':"active"}, {'status':"inactive"} ]); 

я могу применить короткую форму фильтра, например:

activeStates = values.filter(".status", "active"); 

Но когда исходный поток содержит только примитивы:

states = Bacon.fromArray(["active", "inactive" ]); 

Тогда я больше не могу использовать эту форму, и я должен написать литерал функции. Я попытался использовать ".", "", null, для аргумента имени свойства, но это не работает.

я могу определить такую ​​функцию:

function equals(val){ 
     return function(obj){ 
      return obj === val; 
     } 
    } 

, а затем написать:

activeStates = values.filter(equals("active")); 

Является ли это лучшее, что я могу сделать? Или есть либо функция Бэкона, которую я пропускаю, либо общая функция lodash, которая избавляет меня от написания моей собственной функции equals?

ответ

2

Вы можете использовать библиотеку Bacon.matchers для реализации таких фильтров.

Bacon.fromArray(["active", "inactive" ]) 
    .where().equalTo("active") 
    .onValue(function(val) { 
     document.body.innerHTML += val 
    }) 

JsFiddle