[英]Check if matching keys are equal
我搜索了這里是否存在這個問題,但找不到。
假設我們有兩個對象,我們想檢查匹配的鍵是否相等,例如:
const style1 = {
color: 'brown',
backgroundColor: 'blue',
border: '3px solid blue'
}
const style2 = {
fontSize: '16px',
padding: '10px',
color: 'brown'
}
類似的結果:
isMatchingKeysEqual(style1, style2)
應該返回true
迭代一個對象的鍵/值對( “entries” ),並通過Array.prototype.some()
檢查是否有匹配另一個。
function isMatchingKeysEqual(obj1, obj2) { return Object.entries(obj1).some(([ key, val ]) => obj2[key] === val) } const style1 = { color: 'brown', backgroundColor: 'blue', border: '3px solid blue' } const style2 = { fontSize: '16px', padding: '10px', color: 'brown' } console.log(isMatchingKeysEqual(style1, style2))
請注意,這僅適用於深度為 1 的對象。如果您需要檢查具有對象或數組值的復雜對象,則需要執行一些遞歸操作。
這個問題我想了好幾天了,相信我已經有了一個滿意的解決方案。
我想編寫一個可以接收 n 個對象參數的函數。 這樣它就可以用於不止兩個對象。
這里是:
function areIntersectingKeysEqual(...objects) {
return objects
.map((object) => Object.keys(object))
.sort((a, b) => a.length - b.length)
.reduce((a, b) => a.filter((key) => b.includes(key)))
.every((key) => objects.every((object) => object[key] === objects[0][key]));
}
讓我解釋一下它是如何工作的。
在高層次上,首先我們找到相交的鍵,然后我們確定是否所有相交的鍵都相等。
這是它的使用方法。
function areIntersectingKeysEqual(...objects) { return objects .map((object) => Object.keys(object)) .sort((a, b) => a.length - b.length) .reduce((a, b) => a.filter((key) => b.includes(key))) .every((key) => objects.every((object) => object[key] === objects[0][key])); } const style1 = { color: 'brown', backgroundColor: 'blue', border: '3px solid blue', }; const style2 = { fontSize: '16px', padding: '10px', color: 'brown', }; const style3 = { fontSize: '10px', color: 'blue', }; areIntersectingKeysEqual(style1, style2); // true areIntersectingKeysEqual(style1, style2, style3); // false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.