【问题标题】:How to check equality of two objects with selected attributes but they are different types如何检查具有选定属性但它们是不同类型的两个对象的相等性
【发布时间】:2021-07-12 02:52:51
【问题描述】:

我有 2 个点对象,如下所示, 请注意

  1. point1 (p1, p2, p3 and p4) 是字符串类型,但它们是小数点数字。

  2. point2 (p1, p2, p3 和 p4) 是数字。

  3. 对象中还有其他属性,但我不需要比较它们的相等性

  4. 如何仅比较 point1(p1、p2、p3 和 p4)=== point2(p1、p2、p3 和 p4)的相等性

    const point1 = {
      id: 1234,
      p1: "1.000000",
      p2: undefined,
      p3: "1.0",
      p4: "1.0",
      p5: "somevale 1"
    };
    
    const point2 = {
      id: 3456,
      p1: 1,
      p2: undefined,
      p3: 1,
      p4: 1,
      p5: "somevalue 2"
    };
    

【问题讨论】:

标签: javascript typescript ecmascript-6


【解决方案1】:

定义要检查相等性的keys 数组,然后在该数组上使用.every() 迭代每个键。对于每个键,您可以使用 isNaN() 检查来自 point1 的值是否为数字,如果是,则使用一元加号运算符 (+) 将其转换为数字,否则,您可以保持原样原始值并将其与存储在point2 中的键的值进行比较。对.every() 的回调需要为数组中的所有键返回true,以便pointsEqualtrue,否则如果两个键之间不匹配,则为false

const point1 = { id: 1234, p1: "1.000000", p2: undefined, p3: "1.0", p4: "1.0", p5: "somevale 1" };
const point2 = { id: 3456, p1: 1, p2: undefined, p3: 1, p4: 1, p5: "somevalue 2" };

const keys = ["p1", "p2", "p3", "p4"];
const pointsEqual = keys.every(
  key => (isNaN(point1[key]) ? point1[key] : +point1[key]) === point2[key]
);
console.log(pointsEqual); // true

【讨论】:

    【解决方案2】:

    如果您使用 Javascript,则需要 loop through items 并单独比较。此外, === 用于类型检查。使用 == 跳过类型检查。

    【讨论】:

    • 我正在使用打字稿
    【解决方案3】:

    您可以使用 for 循环从 1 循环到 4 并通过将 "p" 连接到索引来获取相应的属性,如下所示:

    const point1 = {
      id: 1234,
      p1: "1.000000",
      p2: undefined,
      p3: "1.0",
      p4: "1.0",
      p5: "somevale 1"
    };
    const point2 = {
      id: 3456,
      p1: 1,
      p2: undefined,
      p3: 1,
      p4: 1,
      p5: "somevalue 2"
    };
    var isEqual = true;
    for(let i = 1; i < 5; i++){
      if(point1["p"+i] !== point2["p"+i]){
        isEqual = false;
      }
    }
    console.log(isEqual);

    注意!=!== 之间的区别。 (一个比较类型,另一个不比较)

    【讨论】:

    • p1, p2, p3 p4 仅用于提交名称以解释此处的问题,但实际上它们具有唯一的名称,没有模式
    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2012-12-31
    • 2019-06-26
    相关资源
    最近更新 更多