json 是否可以仅在它们共享的键/属性之间比较两个对象?

gjmwrych  于 2023-11-20  发布在  其他
关注(0)|答案(3)|浏览(99)

所以我有两个对象

address: {
  id: 1234,
  city: "foo",
  country: "bar",
  name: "baz"
}

字符串

defaultAddress: { 
  id: 1234,
  city: "foo",
  country: "bar",
  firstName: "ba",
  lastName: "z"
}


如果我试图在它们之间做一个直接的比较/Assert,即。

expect(address).to.contain(defaultAddress)


(or反之亦然),它会失败,因为每个都包含另一个不包含的字段
(AssertionError:expect {address} to have a property 'firstName')
我只想比较它们共享的键中的值。有可能通过编程来做这样的事情吗?

z18hc3ub

z18hc3ub1#

为什么不使用.to.include.any.keys作为

expect(defaultAddress).to.include.any.keys(...Object.keys(address));

字符串
但没有测试

r8xiu3jd

r8xiu3jd2#

我要强调一个尚未提到的重要方面。
虽然写一个函数总是可能的,

f(a, b) {...}

字符串
测试两个对象ab是否在公共键的对应中共享相同的值,应该清楚地说明,这样的函数不能被认为是等价的定义,因为每个等价都需要是可传递的。

assert(f({a: 0}, {a: 0, b: 1}))  
assert(f({a: 0, b: 1}, {b: 1}))  
assert(!f({a: 0}, {b: 1}))

t0ybt7op

t0ybt7op3#

您正在尝试匹配共享密钥子集上的对象。这可以按如下方式完成。

for(const key in address) {
  if(typeof defaultAddress[key] !== 'undefined') {
    expect(address[key]).to.equal(defaultAddress[key])
  }
}

字符串
再看看这个answer

相关问题