![](/img/trans.png)
[英]How do I merge two objects such that keys from one map to values of another, without the extra keys in the second, using latest Javascript?
[英]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.etnries
和Array.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.