首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查两个对象的相等性(仅特定键值)

如何检查两个对象的相等性(仅特定键值)
EN

Stack Overflow用户
提问于 2021-07-12 02:20:18
回答 4查看 75关注 0票数 0

如何检查两个对象(仅特定的键值)是否相等,其中一个对象类型是number,另一个是字符串类型,但它们是numbers类型。我想检查两个对象的x1、x2、x3和x4的值是否相等,而不是检查所有的对象值

代码语言:javascript
运行
复制
var object1 = {
        id: 1234
        x1: "1.000000",
        x2: undefined,
        x3: "1.0",
        x4: "1.0",
        x5: somevale 1
};
var object2 = {
        id: 3456
        x1: 1,
        x2: undefined,
        x3: 1,
        x4: 1,
        x5: somevalue 2
};

我从How to check equality of two objects, one object's attribute's type is number other ones type is string but they are numbers那里得到了答案,这个解决方案会检查对象的每个属性,因为其他属性不能相同。

EN

回答 4

Stack Overflow用户

发布于 2021-07-12 02:25:45

您可以使用Object.keys比较这两个对象是否具有相同的键。

代码语言:javascript
运行
复制
function keysEqual(obj1, obj2){
    const keys1 = Object.keys(obj1), keys2 = Object.keys(obj2);
    return keys1.length === keys2.length && keys1.every(key => keys2.includes(key))
}
var object1 = {
        id: 1234,
        x1: "1.000000",
        x2: undefined,
        x3: "1.0",
        x4: "1.0",
        x5:  1
};
var object2 = {
        id: 3456,
        x1: 1,
        x2: undefined,
        x3: 1,
        x4: 1,
        x5:  2
};
console.log(keysEqual(object1, object2));

票数 0
EN

Stack Overflow用户

发布于 2021-07-12 02:32:11

这是accepted answer of your previous question的修改版本-只有在字段"x1“、"x2”、"x3“、"x4”松散相等的情况下,这两个对象才被视为相等-其他字段被排除在比较步骤之外

算法的要点是使用Js every函数:对于"x1“、"x2”、"x3“、"x4”中的每个字段,object1必须(松散地)等于该字段的object2

代码语言:javascript
运行
复制
const fieldsToCheck = ["x1", "x2", "x3", "x4"];

function equal(obj1, obj2, fieldsToCheckFor = fieldsToCheck) {
  return fieldsToCheckFor.every((key) => obj1[key] == obj2[key]);
}

var object1 = {
  id: 1234,
  x1: "1.000000",
  x2: undefined,
  x3: "1.0",
  x4: "1.0",
};
var object2 = {
  id: 3456,
  x1: 1,
  x2: undefined,
  x3: 1,
  x4: 1,
};

var object3 = {
  id: 3456,
  x1: 1,
  x2: undefined,
  x3: 1,
  x4: 1,
  x5: 7,
  randomFieldThatDoesNotGetChecked: "a72",
};

var object4 = {
  id: 3456,
  x1: 1,
  x2: "x2 has been defined",
  x3: 1,
  x4: 1,
  x5: 7,
  randomFieldThatDoesNotGetChecked: "a72",
};

// Should be True
console.log("Test1", equal(object1, object2));

// Should be True
console.log("Test2", equal(object2, object3));

// Should be False
console.log("Test3", equal(object1, object4));

票数 0
EN

Stack Overflow用户

发布于 2021-07-12 02:45:13

代码语言:javascript
运行
复制
var object1 = {
        id: 1234,
        x1: "1.000000",
        x2: undefined,
        x3: "1.0",
        x4: "1.0",
        x5: 1
};
var object2 = {
        id: 3456,
        x1: 1,
        x2: undefined,
        x3: 1,
        x4: 1,
        x5: 2
};

var check = ["x1", "x2", "x3", "x4"];

console.log(eval());

function eval() {
  for (var i = 0; i < check.length; i++) {
    if (object1[check[i]] != object2[check[i]]) return false;
  }
  return true;
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68338945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档