如何检查具有选定属性但类型不同的两个对象的相等性

qmelpv7a  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(339)

我有2个点对象,如下所示,请注意
点1(p1、p2、p3和p4)是字符串类型,但它们是小数点。
点2(p1、p2、p3和p4)是数字。
对象中还有其他属性,但我不需要比较它们的相等性
如何比较点1(p1、p2、p3和p4)的相等性)==仅点2(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"
};
ldioqlga

ldioqlga1#

定义一个 keys 您要检查其相等性,然后使用 .every() 在该数组上迭代每个键。对于每个键,可以检查其值是否来自 point1 是使用isnan()表示的数字,如果是,则使用一元加号运算符将其转换为数字( + ),否则,您可以将其保留为原始值,并将其与存储在中的键处的值进行比较 point2 . 召回 .every() 需要返回 true 对于数组中的所有键 pointsEqual 成为 true ,否则就会 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
vmpqdwk3

vmpqdwk32#

如果您使用的是javascript,则需要遍历项目并单独比较。此外,==用于类型检查。使用==跳过类型检查。

5jdjgkvh

5jdjgkvh3#

你可以使用 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);

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

相关问题