2016-11-24 6 views
1

_.filter 메서드에 대한 클로저 여야하는 함수 배열이 있으면이 필터를 어떻게 동적으로 만들 수 있습니까?밑줄 동적 연결

_filters : { 
    shipped: function(order){ return order.get('is_shipped') }, 
    imported: function(order){ return order.get('is_imported') } 
}, 

내가 원하는 _filters이를 만드는 방법으로,

어쩌면 누군가가 아이디어가 객체에있는 점에서 동적으로 클로저에서이

_.chain(orders).filter(filters.shipped).filter(filters.imported).value() 

처럼 체인을 만들 수있는 능력을 가지고있다 밑줄로 동적으로 연결?

감사합니다.

답변

2

올바르게 이해하려는 경우 동적 범위의 필터를 배열에 적용해야합니다. 그렇다면 _.values()을 사용하여 개체의 필터를 추출한 다음 _.every()을 사용하여 반복 할 수 있습니다. . 모든 필터는 true을 반환하는 경우, 순서는 결과 배열에있을 것입니다 :

var filters = { 
    shipped: function(order) { 
    return order.get('is_shipped') 
    }, 
    imported: function(order) { 
    return order.get('is_imported') 
    } 
}; 

var filtersArray = _.values(filters); 

var result = _.filter(orders, function(order) { 
    return _.every(filters, function(filter) { 
    return filter(order); 
    }); 
}); 

또한 밑줄없이 필터링을 수행 할 수 있습니다

var filters = { 
    shipped: function(order) { 
    return order.get('is_shipped') 
    }, 
    imported: function(order) { 
    return order.get('is_imported') 
    } 
}; 

var filterKeys = Object.keys(filters); 

var result = orders.filter(function(order) { 
    return filterKeys.every(function(key) { 
    return filter[key](order); 
    }); 
}); 
+0

감사합니다! 그게 정확히 내가 찾고 있던 :) – Toletov