【问题标题】:How can i compare two objects with different datatypes如何比较具有不同数据类型的两个对象
【发布时间】:2019-09-27 15:24:44
【问题描述】:

如何比较具有不同数据类型的两个对象

var a = {
sort: 7,
start: "0"}

var b = {
sort: "7",
start: "0"}

我希望两者是平等的。但是当我使用这个比较时它给出了错误:JSON.stringify(a) === JSON.stringify(b)

【问题讨论】:

  • 它是false,因为a.sortintb.sortstring,它们不一样
  • 我更喜欢更改对象,以便它们在比较它们之前都包含相同属性的字符串或数字,而不是认为它们是相等的。如果您真的想这样做,您必须遍历所有条目并比较 .toString() 值(或使用 == over === 使用自动转换),但是一旦您的对象变得更多,就会出现错误等待发生复杂,您必须考虑所有特殊情况,例如 NaNnull 以及所有其他不能很好地字符串化的值。

标签: javascript json object


【解决方案1】:

您可以这样做的一种方法是对对象进行标记,然后解析它们 using a reviver 函数将字符串转换为数字,然后将它们字符串化并比较:

var a = {
  sort: 7,
  start: "0",
  x: "a"
}

var b = {
  sort: "7",
  start: "0",
  x: "a"
}

const strA = JSON.stringify(a);
const strB = JSON.stringify(b);

const x = JSON.parse(strA, (k, v) => {  
  return k && !isNaN(+v) ? +v : v;
})

const y = JSON.parse(strB, (k, v) => {
  return k && !isNaN(+v) ? +v : v;
})

const equal = JSON.stringify(x) === JSON.stringify(y);

console.log(equal);

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多