2016-10-07 79 views
3

我想找出在lodashjavascript library,如何找出過濾器數組中的對象的多個鍵的值。 一些類似於SQL - 凡(VAL1,VAL2)lodash過濾器與多個值的鍵

KEY說了,用下面的例子:

var users = [ 
    { 'user': 'barney', 'age': 36, 'active': true }, 
  { 'user': 'fred',   'age': 40, 'active': false }, 
    { 'user': 'Avding',   'age': 34, 'active': true } 
]; 

_.filter(...) 

我如何才能找到用戶,誰的年齡(34,36)? 數字也可以改變運行

回答

3

Lodash的filter接受謂語。您可以使用部分應用程序中創建的謂語,所以你可以很容易地改變這些值:

var users = [ 
 
    { 'user': 'barney', 'age': 36, 'active': true }, 
 
    { 'user': 'fred', 'age': 40, 'active': false }, 
 
    { 'user': 'Avding', 'age': 34, 'active': true } 
 
]; 
 

 
var predicate = function(start, end) { 
 
    return function(user) { 
 
    return _.inRange(user.age, start, end + 1); 
 
    } 
 
} 
 

 
var result = _.filter(users, predicate(34, 36)); 
 

 
console.log('inRange', result); 
 

 
/** is equal predicate **/ 
 

 
var predicate = function() { 
 
    var args = _.toArray(arguments); 
 
    
 
    return function(user) { 
 
    var equalToUserAge = _.partial(_.isEqual, user.age); 
 
    
 
    return args.some(equalToUserAge); 
 
    } 
 
} 
 

 
var result = _.filter(users, predicate(34, 40)); 
 

 
console.log('equals', result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>

你也可以用香草JS做到這一點很容易,以及(示例使用ES6):

var users = [ 
 
    { 'user': 'barney', 'age': 36, 'active': true }, 
 
    { 'user': 'fred', 'age': 40, 'active': false }, 
 
    { 'user': 'Avding', 'age': 34, 'active': true } 
 
]; 
 

 
const predicate1 = (start, end) => ({ age }) => 
 
    age >= start && age <= end; 
 

 
const result1 = users.filter(predicate1(34, 36)); 
 

 
console.log('in range', result1); 
 

 
const predicate2 = (...args) => ({ age }) => 
 
    args.some((num) => age === num); 
 

 
const result2 = users.filter(predicate2(34, 40)); 
 

 
console.log('is equal', result2);

+0

其實,您的建議可以作爲** **中之間,但是我需要精確匹配,所以它應該返回年齡== 34,或年齡== 36。如果我需要什麼東西(34,40)。你的代碼返回3個對象,但是我需要在34歲和40歲時纔看到2個對象。 – Kenz

+0

將謂詞改爲任何你喜歡的。請參閱代碼中的示例謂詞。 –

0
const users = [ 
    { 'user': 'barney', 'age': 36, 'active': true }, 
    { 'user': 'fred', 'age': 40, 'active': false }, 
    { 'user': 'Avding', 'age': 34, 'active': true } 
]; 

const minAge = 34; 
const maxAge = 36; 

const filtered = _.filter(users, (user) => { 
    return user.age >= minAge && user.age <= maxAge; 
}); 
-1

你可以做這樣的事情:

_.filter(object, { 'age': '34', 'age': '24' }); 

的問題是,如果你在做這個動態的,你不能在一個對象相同的鍵不止一次。