什么是最简单的方法来检查两个对象之间的键是否匹配?

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)

有没有一种简单的方法来检查它们之间的所有键是否匹配?

*匹配:两个对象在同一嵌套位置具有相同的键,没有额外的键,所以objAobjB匹配

Nin*_*olz 5

在普通的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)

  • 对于`obj1 = {a:{}}和obj2 = {a:"test"}`,这将失败 (2认同)