如何检查两个对象(仅特定的键值)是否相等,其中一个对象类型是number,另一个是字符串类型,但它们是numbers类型。我想检查两个对象的x1、x2、x3和x4的值是否相等,而不是检查所有的对象值
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那里得到了答案,这个解决方案会检查对象的每个属性,因为其他属性不能相同。
发布于 2021-07-12 02:25:45
您可以使用Object.keys比较这两个对象是否具有相同的键。
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));
发布于 2021-07-12 02:32:11
这是accepted answer of your previous question的修改版本-只有在字段"x1“、"x2”、"x3“、"x4”松散相等的情况下,这两个对象才被视为相等-其他字段被排除在比较步骤之外
算法的要点是使用Js every函数:对于"x1“、"x2”、"x3“、"x4”中的每个字段,object1必须(松散地)等于该字段的object2
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));
发布于 2021-07-12 02:45:13
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;
}
https://stackoverflow.com/questions/68338945
复制相似问题