2016-12-08 20 views
2

で評価されたフィールドに基づいてデータを取得します。出力としてParentNames。私の入力がある場合私は以下のようにオブジェクトの配列を持っている状態

input = ['A','B'];

だから、['A','B']私の予想出力は4つのオブジェクト(SrNo 1,2,3,4)の配列です私は

//filter all objects for matching BabyNames 
var a1 = _.filter(data, function (item) { return _.contains(input, item["BabyName"]); }) 

//pluck ParentNames from a1 array of objects and take unique 
var a2 = _.uniq(_.pluck(a1,"ParentName")) 

//filter all objects (original data set) on ParentName with a2 as input 
var a3 = _.filter(data, function (item) { return _.contains(a2, item["ParentName"]); }) 

Iを達成するためにやっていること

効率的な方法ではありませんが、他の解決策には出られませんでした。 ご案内ください。

+2

SrNoはparentNameのプロパティを継承するBabyNameからオブジェクトプロパティを継承していますか?上記のオブジェクト図を読み取る方法がわかりません。 –

+0

_ "以下のようなオブジェクトの配列" _は、オブジェクトの配列ではありません。 [mcve]を含めてください。 –

+0

私は入力データ変数 – iTSrAVIE

答えて

0

基本的に、データ配列の少なくとも2倍、親を取得するため、および結果をフィルタリングするために1回ずつ繰り返す必要があります。 Setを使用する場合は中間ステップ、またはハッシュテーブルとしてオブジェクトを克服することができます。

これはES6の提案です。

var data = [{ SrNo: 1, BabyName: 'A', ParentName: 'X' }, { SrNo: 2, BabyName: 'D', ParentName: 'X' }, { SrNo: 3, BabyName: 'B', ParentName: 'Y' }, { SrNo: 4, BabyName: 'E', ParentName: 'Y' }, { SrNo: 5, BabyName: 'C', ParentName: 'Z' }], 
 
    input = ['A', 'B'], 
 
    babies = new Set(input), 
 
    parents = new Set, 
 
    result; 
 

 
data.forEach(a => babies.has(a.BabyName) && parents.add(a.ParentName)); 
 
result = data.filter(a => parents.has(a.ParentName)); 
 

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

0

Here is another way結果を取得します。

var input = ['A', 'B']; 

function getParents(input, filterProp, returnProp) { 
    var filtered = data.filter(function(d) { 
    return input.indexOf(d[filterProp]) !== -1; 
    }); 
    if (returnProp) { 
    return filtered.map(function(d) { 
     return d[returnProp]; 
    }); 
    } 
    return filtered; 
} 

// get the result by first filter with baby name and return parent names 
// then filter with parent names 
getParents(getParents(input, "BabyName", "ParentName"), "ParentName"); 
関連する問題