2016-10-07 16 views
3

私はlodashjavascript libraryで見つけようとしています。オブジェクトのフィルタ配列をキーの複数の値で見つける方法を教えてください。年齢は(34、36)にあります複数の値を持つキーのlodashフィルタ

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

_.filter(...) 

どのように見つけることができるユーザー、??:(val1と、VAL2)

でKEYは、以下の例で、言った - SQLに似何か 番号も

答えて

3

Lodashのfilterは、述語を受け入れ、実行時に変更することができます。 (例ではES6を使用しています)

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で簡単にこれを行うことができます:あなたは簡単に値を変更できるように、部分的なアプリケーションを使用して述語を作成することができます

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' }); 

問題があります。

関連する問題