lon*_*556 3 javascript underscore.js lodash
假设你有两个具有相当数量嵌套的对象......
const objA = {
one: {
a: 10,
b: 'string1',
c: {
d: 10
}
},
two : 'string1'
}
const objB = {
one: {
a: 20,
b: 'string2',
c: {
d: 20
}
},
two : 'string2'
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来检查它们之间的所有键是否匹配?
*匹配:两个对象在同一嵌套位置具有相同的键,没有额外的键,所以objA和objB匹配
在普通的Javascript中,您可以获取密钥,比较长度并迭代密钥并检查值是否为对象.
function compareKeys(a, b) {
var keysA = Object.keys(a),
keysB = Object.keys(b);
return keysA.length === keysB.length
&& keysA.every(k => b.hasOwnProperty(k) && (
a[k] && typeof a[k] === 'object' ||
b[k] && typeof b[k] === 'object'
? compareKeys(a[k], b[k])
: true));
}
const
objA = { one: { a: 10, b: 'string1', c: { d: 10 } }, two : 'string1' },
objB = { one: { a: 20, b: 'string2', c: { d: 20 } }, two : 'string2' },
objC = { one: { a: 20, b: 'string2', c: { d: 20, e: false } }, two : 'string2' };
console.log(compareKeys(objA, objB));
console.log(compareKeys(objA, objC));
console.log(compareKeys({ a: {} }, { a: "test" }));
console.log(compareKeys({ a: "test" }, { a: {} }));
console.log(compareKeys({ a: { b: "new str" } }, { a: "test" }));Run Code Online (Sandbox Code Playgroud)