admin管理员组文章数量:1405874
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.
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.
Share Improve this question edited Nov 12, 2018 at 18:13 Frank Modica 10.5k4 gold badges26 silver badges41 bronze badges asked Nov 12, 2018 at 18:07 skpdmskpdm 1,4482 gold badges17 silver badges31 bronze badges 1- 2 by "if they have the same keys" do you mean an exact match? One can't have more than the other? Also, please show us what you've tried. – zfrisch Commented Nov 12, 2018 at 18:09
3 Answers
Reset to default 7You 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) )
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
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./ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>
本文标签: javascriptFind out if objects have same keysStack Overflow
版权声明:本文标题:javascript - Find out if objects have same keys - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744897529a2631154.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论