簡體   English   中英

當一個 object 使用 Lodash 有額外的鍵時,你如何比較 JSON 對象中的鍵和值?

[英]How do you compare keys & values in a JSON objects when one object has extra keys using Lodash?

我有兩個 JSON 對象,如下所示:

var obj1 = {a: "apple", b: "banana", c: "carrot"}
var obj2 = {a: "apple", e: “egg” b: "banana", c: "carrot", d: "dog"}

我希望能夠對兩個對象進行 Boolean 檢查比較,而不必從任何一個對象中刪除數據。 例如,如果我要使用上面的數據,Boolean 檢查應該返回true ,因為兩個對象中的鍵值匹配。

但是,假設obj1保持不變,但obj2如下:

var obj1 = {a: "apple", b: "banana", c: "carrot"}
var obj2 = {a: "ant", e: “egg” b: "banana", c: "carrot", d: "dog"}

對於此數據,它應該返回false ,因為即使其他字段匹配並且某些字段不存在於兩個對象中,鍵的值也不匹配。

有任何想法嗎? 我更願意使用 Lodash,因為他們有一個高質量的庫。 最初嘗試使用_.isEqual(obj1, obj2)但它不能滿足我的確切需求。

不知道lodash有沒有這樣的方法。 但是您可以通過使用Object.etnriesArray.every方法獲得相同的結果。

 var obj1 = { a: "apple", b: "banana", c: "carrot" } var obj2 = { a: "apple", b: "banana", c: "carrot", d: "dog", e: "egg" } var obj3 = {a: "apple", b: "banana", c: "carrot"} var obj4 = {a: "ant", e: "egg",b: "banana", c: "carrot", d: "dog"} function checkEquality(a, b) { const entries1 = Object.entries(a); const entries2 = Object.entries(b); const short = entries1.length > entries2? entries2: entries1; // pick the shorter array const long = short === entries1? b: a; const isEqual = short.every(([k, v]) => long[k] === v); return isEqual; } console.log(checkEquality(obj1, obj2)) console.log(checkEquality(obj3, obj4))

_.isMatch可以提供幫助。 檢查下面的片段

 var obj1 = { a: "apple", b: "banana", c: "carrot" } var obj2 = { a: "apple", e: "egg", b: "banana", c: "carrot", d: "dog" } console.log(_.isMatch(obj2, obj1)); var obj1 = { a: "apple", b: "banana", c: "carrot" } var obj2 = { a: "ant", e: "egg", b: "banana", c: "carrot", d: "dog" } console.log(_.isMatch(obj2, obj1));
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

請注意_.isMatch(obj1, obj2)將不起作用。 您需要添加一些邏輯來確定哪個 object 具有更多鍵並將其作為第一個參數傳遞。

暫無
暫無

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

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