比较两个对象,如果存在一部分对象键值对,则返回true

时间:2019-12-06 00:40:02

标签: javascript lodash

我需要比较两个对象,并根据以下逻辑返回true或false。

const expectedValue = {
            city: "San Jose",
            state: "california",
            zip: "95234"
         }

const actualValue = {
            address: "5543322 Adam St",
            city: "San Jose",
            state: "california",
            zip: "95234",
            country: "USA"
}

比较上述对象时,它应该返回“ TRUE ”,因为expectedValue的键值对存在于ActualValue中。 我在lodash文档中找不到任何内容,对此有什么好的解决方案吗?

先谢谢您!

2 个答案:

答案 0 :(得分:2)

您可以在every()产生的数组上使用Object.entries()来测试期望中的每个键/值对是否与实际匹配:

const expectedValue = {
   city: "San Jose",
   state: "california",
   zip: "95234"
}

const actualObject = {
   address: "5543322 Adam St",
   city: "San Jose",
   state: "california",
   zip: "95234",
   country: "USA"
}


let test = Object.entries(expectedValue)
          .every(([key, value]) => actualObject[key] === value )

console.log(test)

如果expectedValue中的每个键/对都存在actualObject中并且与值匹配,则返回true,否则返回false。

在极端情况下,expectedValue中存在一个值为undefined的属性。您可以通过测试actualObject.hasOwnProperty(key) && actualObject[key] === value来解决此问题。

答案 1 :(得分:0)

Lodash具有_.isMatch()功能:

  

在对象和源之间进行部分深度比较,以   确定对象是否包含等效的属性值。

import akka.actor.ActorRef;
import akka.actor.ActorSystem;

final ActorSystem system = ActorSystem.create("DeadLetters");
final ActorRef actor = system.actorOf(Props.create(DeadLetterActor.class));
system.getEventStream().subscribe(actor, DeadLetter.class);
subscribe()