2017-03-23 11 views
1

I持た1つの(ネストされたオブジェクトと)次のようになりますオブジェクトフィルタリングします(ネストされたオブジェクトでも)このようになります使用Lodashコンペアマッチと二つのオブジェクト

var data = { 
"results":{ 
      "Description":"There was a record added", 
      "resultTimestamp":"2017-03-23T21:56:05Z" 
     }, 
"service":"FDSY", 
"StartTimestamp":"2017-03-23T21:55:17Z", 
"eventId":"033dc019-0b8a-4af22", 
"assetId":"TenGigE0/14/0/0.55", 
"assetType":"CLCI" 
} 

と別:

var filter = { 
"results":{ 
      "Description":"", 
     }, 
"service":"", 
"eventId":"", 
"assetType":"" 
} 

2番目のオブジェクトは、その最初のオブジェクトの「フィルタ条件」を表します。私はこのようになりますオブジェクトを返すために使用することができますlodash方法:基本的に

var result = { 
"results":{ 
    "Description":"There was a record added" 
}, 
"service":"FDSY", 
"eventId":"033dc019-0b8a-4af22", 
"assetType":"CLCI" 
} 

を、私はフィルタオブジェクト内のキーと一致する唯一のキーと値のペアであることを、結果を必要としています。また、ネストされたオブジェクトをフィルタリングする必要があります

私はlodashを使う必要はありませんが、私はたくさんの機能がこれを簡単にするだろうと知っています。 ありがとうございます。

答えて

3

キーの反復にはArray#reduce、オブジェクトの組み立てにはObject.assignというフィルタのキーを使用できます。深くネストされたオブジェクトの場合

var data = { service: "FDSY", StartTimestamp: "2017-03-23T21:55:17Z", eventId: "033dc019-0b8a-4af22", assetId: "TenGigE0/14/0/0.55", assetType: "CLCI" }, 
 
    filter = { service: "", eventId: "", assetType: "" }, 
 
    result = Object.keys(filter).reduce((r, k) => Object.assign(r, { [k]: data[k] }), {}); 
 

 
console.log(result);

ES5

var data = { service: "FDSY", StartTimestamp: "2017-03-23T21:55:17Z", eventId: "033dc019-0b8a-4af22", assetId: "TenGigE0/14/0/0.55", assetType: "CLCI" }, 
 
    filter = { service: "", eventId: "", assetType: "" }, 
 
    result = Object.keys(filter).reduce(function (r, k) { 
 
     r[k] = data[k]; 
 
     return r; 
 
    }, {}); 
 

 
console.log(result);

、あなたは元のオブジェクトの上に閉鎖して再帰的なアプローチを使用することができます。

var data = { results: { Description: "There was a record added", resultTimestamp: "2017-03-23T21:56:05Z", foo: {bar:42} }, service: "FDSY", StartTimestamp: "2017-03-23T21:55:17Z", eventId: "033dc019-0b8a-4af22", assetId: "TenGigE0/14/0/0.55", assetType: "CLCI" }, 
 
    filter = { results: { Description: "", foo: { bar: "" } }, service: "", eventId: "", assetType: "" }, 
 
    result = Object.keys(filter).reduce(function iter(source) { 
 
     return function (r, k) { 
 
      r[k] = filter[k] && typeof filter[k] === 'object' ? 
 
       Object.keys(filter[k]).reduce(iter(source[k]), {}) : 
 
       source[k]; 
 
      return r; 
 
     }; 
 
    }(data), {}); 
 

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

+0

ありがとうございます!これはうまくいった。ネストされたオブジェクトがある場合はどうなりますか? –

+0

@EricWhitehead、編集をご覧ください。 –

関連する問題