找出对象是否具有相同的键

时间:2018-11-12 18:08:00

标签: javascript algorithm underscore.js

我有一对物体。我试图找出它们是否具有相同的键,就像这样:

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

我也在使用_underscore.js

预先感谢

John S。

3 个答案:

答案 0 :(得分:5)

您可以测试它们是否具有相同数量的键,并且一个对象的每个键是否都包含在另一个中:

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) )

答案 1 :(得分:2)

尝试一下:

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

答案 2 :(得分:1)

由于您说的是使用下划线,因此也可以在已排序的键数组上使用isEqual

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>