Reputation: 1438
I have a pair of objects. I'm trying to find out if they both have the same keys, like so:
let a = { user1: true, user2: true }
let b = { user1: true, user3: true }
hasSameKeys(a, b) => false
let a = { user1: true, user2: true }
let b = { user2: true, user1: true }
hasSameKeys(a, b) => true
I'm also using _underscore.js
Thanks in advance
John S.
Upvotes: 0
Views: 1886
Reputation: 12990
Since you said you're using underscore, you can also use isEqual
on sorted arrays of keys:
function hasSameKeys(a, b) {
return _.isEqual(_.keys(a).sort(), _.keys(b).sort());
}
let a = { user1: true, user2: true };
let b = { user1: true, user3: true };
console.log(hasSameKeys(a, b));
a = { user1: true, user2: true };
b = { user2: true, user1: true };
console.log(hasSameKeys(a, b));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
Upvotes: 1
Reputation: 4346
Try this:
var a1 = { user1: true, user2: true }
var b1 = { user2: true, user1: true }
var c1 = { ...a1, ...b1}
var a1b1SameKeys = Object.keys(a1).length === Object.keys(b1).length && Object.keys(a1).length === Object.keys(c1).length
console.log (a1b1SameKeys) // true
var a2 = { user1: true, user2: true }
var b2 = { user1: true, user3: true }
var c2 = { ...a2, ...b2}
var a2b2SameKeys = Object.keys(a2).length === Object.keys(b2).length && Object.keys(a2).length === Object.keys(c2).length
console.log (a2b2SameKeys) // false
var a3 = { user1: true, user2: true, foo: true }
var b3 = { user1: true, user2: true, bar: false }
var c3 = { ...a3, ...b3}
var a2b2SameKeys = Object.keys(a3).length === Object.keys(b3).length && Object.keys(a3).length === Object.keys(c3).length
console.log (a2b2SameKeys) // false
Upvotes: 2
Reputation: 92440
You can test if they have the same number of keys and if every one of one object's keys are contained in the other:
function hasSameKeys(a, b){
return Object.keys(a).length === Object.keys(b).length
&& Object.keys(a).every(k => b.hasOwnProperty(k))
}
let a = { user1: true, user2: true }
let b = { user1: true, user3: true }
console.log(hasSameKeys(a, b) )
a = { user1: true, user2: true }
b = { user2: true, user1: true }
console.log(hasSameKeys(a, b) )
Upvotes: 7