2017-07-21 7 views
1

異なるデータでフィルタリングする動的に異なるキー値のペアが存在するたびに、動的なデータがあります。私たちはlodashで複数のキー、値でフィルタリングすることができます。私はそのフィルタ関数を使用していましたが、結果は達成できません。lodashを使用してjson配列内の複数のキーで複数の値をフィルタリングする

データ例:

var data = [ { 
    "VOTER" : 1012, 
    "PARTY" : "REPUBLICAN", 
    "PRECINCT" : 2408, 
    "AGE_GROUP" : "71 +", 
    "LAST_VOTED" : "08/2006", 
    "YEARS_REG" : 51, 
    "BALLOT_STATUS" : "PERM" 
}, { 
    "VOTER" : 1013, 
    "PARTY" : "REPUBLICAN", 
    "PRECINCT" : 2411, 
    "AGE_GROUP" : "71 +", 
    "LAST_VOTED" : "08/2006", 
    "YEARS_REG" : 50, 
    "BALLOT_STATUS" : "PERM" 
}, { 
    "VOTER" : 1014, 
    "PARTY" : "DEMOCRAT", 
    "PRECINCT" : 2424, 
    "AGE_GROUP" : "71 +", 
    "LAST_VOTED" : "08/2006", 
    "YEARS_REG" : 50, 
    "BALLOT_STATUS" : "PERM" 
}, { 
    "VOTER" : 1015, 
    "PARTY" : "DEMOCRAT", 
    "PRECINCT" : 2418, 
    "AGE_GROUP" : "71 +", 
    "LAST_VOTED" : "08/2006", 
    "YEARS_REG" : 50, 
    "BALLOT_STATUS" : "POLL" 
    },{ 
    "VOTER" : 1109, 
    "PARTY" : "AMERICAN INDEP", 
    "PRECINCT" : 2404, 
    "AGE_GROUP" : "71 +", 
    "LAST_VOTED" : "08/2006", 
    "YEARS_REG" : 34, 
    "BALLOT_STATUS" : "POLL" 
},{ 
    "VOTER" : 1111, 
    "PARTY" : "DECLINED", 
    "PRECINCT" : 2414, 
    "AGE_GROUP" : "71 +", 
    "LAST_VOTED" : "08/2006", 
    "YEARS_REG" : 34, 
    "BALLOT_STATUS" : "POLL" 
} 

] 

とフィルタオブジェクトです:lodashから

var filterby = {"PARTY":["REPUBLICAN","DEMOCRAT"],"BALLOT_STATUS":["PERM","POLL"]} 

フィルタ機能:

var filtered_data = _.filter(data, filterby); 

答えて

1

以下のよう

はあなたの filterby VARを変更

。 filterbyは、私が知ることができませんダイナミックになりますあなたの答えのためではなく、

var data = [{ VOTER: 1012, PARTY: "REPUBLICAN", PRECINCT: 2408, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 51, BALLOT_STATUS: "PERM" }, { VOTER: 1013, PARTY: "REPUBLICAN", PRECINCT: 2411, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 50, BALLOT_STATUS: "PERM" }, { VOTER: 1014, PARTY: "DEMOCRAT", PRECINCT: 2424, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 50, BALLOT_STATUS: "PERM" }, { VOTER: 1015, PARTY: "DEMOCRAT", PRECINCT: 2418, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 50, BALLOT_STATUS: "POLL" }, { VOTER: 1109, PARTY: "AMERICAN INDEP", PRECINCT: 2404, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 34, BALLOT_STATUS: "POLL" }, { VOTER: 1111, PARTY: "DECLINED", PRECINCT: 2414, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 34, BALLOT_STATUS: "POLL" }], 
 
    filterBy = { PARTY: ["REPUBLICAN", "DEMOCRAT"], BALLOT_STATUS: ["PERM", "POLL"] }, 
 
    result = data.filter(function (o) { 
 
     return Object.keys(filterBy).every(function (k) { 
 
      return filterBy[k].some(function (f) { 
 
       return o[k] === f; 
 
      }); 
 
     }); 
 
    }); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6

var data = [{ VOTER: 1012, PARTY: "REPUBLICAN", PRECINCT: 2408, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 51, BALLOT_STATUS: "PERM" }, { VOTER: 1013, PARTY: "REPUBLICAN", PRECINCT: 2411, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 50, BALLOT_STATUS: "PERM" }, { VOTER: 1014, PARTY: "DEMOCRAT", PRECINCT: 2424, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 50, BALLOT_STATUS: "PERM" }, { VOTER: 1015, PARTY: "DEMOCRAT", PRECINCT: 2418, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 50, BALLOT_STATUS: "POLL" }, { VOTER: 1109, PARTY: "AMERICAN INDEP", PRECINCT: 2404, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 34, BALLOT_STATUS: "POLL" }, { VOTER: 1111, PARTY: "DECLINED", PRECINCT: 2414, AGE_GROUP: "71 +", LAST_VOTED: "08/2006", YEARS_REG: 34, BALLOT_STATUS: "POLL" }], 
 
    filterBy = { PARTY: ["REPUBLICAN", "DEMOCRAT"], BALLOT_STATUS: ["PERM", "POLL"] }, 
 
    result = data.filter(o => Object.keys(filterBy).every(k => filterBy[k].some(f => o[k] === f))); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

1

_.filter方法は、あなたがのために複数のオプションを指定することはできません。フィルタリング。カスタムフィルタ機能を渡して試してみてください:

_.filter(data, function (item) { 
    return ['REPUBLICAN', 'DEMOCRAT'].indexOf(item.PARTY) >= 0 
     && ['PERM', 'POLL'].indexOf(item.BALLOT_STATUS) >= 0 
}) 
+0

おかげ@hsz、2があるかもしれないとしても3か5キー値のペアがあります: var filterby = {"PARTY":["REPUBLICAN"、 "DEMOCRAT" ]、 "BALLOT_STATUS":["PERM"、 "POLL"]、 "VOTER": "1014"} – Mayur

+0

代わりに変数を使用してください。 – hsz

+0

どうすれば私を導くことができますか? – Mayur

0

それはdataだと2番目のパラメータは参照詳細は反復ごとに呼び出される関数であるべきあなたの場合には最初のパラメータに渡すとなるコレクションの要素を反復処理_.filter機能Documentation

あなたが Arrow Functions

を使用することができますあなたの例では、このために

詳細はスニペットの下に見つけてください。あなたはプレーンなJavascriptを使用してfilterByのキーと値を反復処理することができ

var filterby = (m) => { return m => m.PARTY == "REPUBLICAN" || m.PARTY == "DEMOCRAT" && m.BALLOT_STATUS == "PERM" || m.BALLOT_STATUS == "POLL" }; 

var data = [ { 
 
    "VOTER" : 1012, 
 
    "PARTY" : "REPUBLICAN", 
 
    "PRECINCT" : 2408, 
 
    "AGE_GROUP" : "71 +", 
 
    "LAST_VOTED" : "08/2006", 
 
    "YEARS_REG" : 51, 
 
    "BALLOT_STATUS" : "PERM" 
 
}, { 
 
    "VOTER" : 1013, 
 
    "PARTY" : "REPUBLICAN", 
 
    "PRECINCT" : 2411, 
 
    "AGE_GROUP" : "71 +", 
 
    "LAST_VOTED" : "08/2006", 
 
    "YEARS_REG" : 50, 
 
    "BALLOT_STATUS" : "PERM" 
 
}, { 
 
    "VOTER" : 1014, 
 
    "PARTY" : "DEMOCRAT", 
 
    "PRECINCT" : 2424, 
 
    "AGE_GROUP" : "71 +", 
 
    "LAST_VOTED" : "08/2006", 
 
    "YEARS_REG" : 50, 
 
    "BALLOT_STATUS" : "PERM" 
 
}, { 
 
    "VOTER" : 1015, 
 
    "PARTY" : "DEMOCRAT", 
 
    "PRECINCT" : 2418, 
 
    "AGE_GROUP" : "71 +", 
 
    "LAST_VOTED" : "08/2006", 
 
    "YEARS_REG" : 50, 
 
    "BALLOT_STATUS" : "POLL" 
 
    },{ 
 
    "VOTER" : 1109, 
 
    "PARTY" : "AMERICAN INDEP", 
 
    "PRECINCT" : 2404, 
 
    "AGE_GROUP" : "71 +", 
 
    "LAST_VOTED" : "08/2006", 
 
    "YEARS_REG" : 34, 
 
    "BALLOT_STATUS" : "POLL" 
 
},{ 
 
    "VOTER" : 1111, 
 
    "PARTY" : "DECLINED", 
 
    "PRECINCT" : 2414, 
 
    "AGE_GROUP" : "71 +", 
 
    "LAST_VOTED" : "08/2006", 
 
    "YEARS_REG" : 34, 
 
    "BALLOT_STATUS" : "POLL" 
 
} 
 

 
] 
 

 

 

 
//var filterby = {"PARTY":["REPUBLICAN","DEMOCRAT"],"BALLOT_STATUS":["PERM","POLL"]} 
 

 
var filterby = (m) => { return m => m.PARTY == "REPUBLICAN" || m.PARTY == "DEMOCRAT" && m.BALLOT_STATUS == "PERM" || m.BALLOT_STATUS == "POLL" }; 
 

 

 
var filtered_data = _.filter(data, filterby); 
 
console.log(filtered_data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

関連する問題