簡體   English   中英

使用Lodash比較,匹配和過濾兩個對象

[英]Use Lodash to compare, match and filter two objects

我有一個看起來像這樣的對象(帶有嵌套對象):

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":"" 
}

第二個對象表示第一個對象上的“過濾條件”。 我如何使用lodash返回如下所示的對象:

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

本質上,我需要結果只是與過濾器對象中的鍵匹配的鍵值對。 我還需要對嵌套對象進行過濾

我不需要使用lodash,但我知道他們的很多功能會讓這很容易。 先感謝您。

您可以使用filter的鍵,使用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; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM