比较两个对象不会得到正确的结果

comparing two objects does not give correct results

本文关键字:结果 对象 两个 比较      更新时间:2023-09-26

我正在尝试比较两个对象。年龄不同,但仍然说他们是一样的。。这是我的代码

var personA =
    {
        name: "Josh Kloss",
        age: 33
    }
var personmB =
{
    name: 'Josh Kloss',
    age: 43
}
function compareTwoPeople(a, b) {
    var person1 = Object.keys(a);
    var person2 = Object.keys(b);
    if (person1.length !== person2.length) {
        console.log("They are not same");
    }
    else {
        for (var i = 0; i < person1.length; i++) {
            if (person1[i] === person2[i]) {
                console.log("They are  same");
            }
        }
    }
}
compareTwoPeople(personA, personmB);

我怎样才能比较这两个物体。。。谢谢

Close,只需要稍微整理一下比较,就可以使用键和迭代器获得对象值。

var personA =
    {
        name: "Josh Kloss",
        age: 33
    };
var personB =
{
    name: 'Josh Kloss',
    age: 43
};
function compare(a, b) {
  var aKeys = Object.keys(a),
      bKeys = Object.keys(b);
  if(aKeys.length != bKeys.length) return false;
  for(var i = 0; i < aKeys.length; i++) {
    if(a[aKeys[i]] != b[bKeys[i]]) return false;
  }
  return true;
}
compare(personA, personB);

您正在查找person1[i],它将是[ 'name', 'age' ][0],它是'name',密钥名称。这两个对象都是一样的。你的问题的快速解决方案是:

if (a[person1[i]] !== b[person2[i]]) {
    console.log("They are not the same");
    return;
}

然而,这不是一个很好的相等性测试,因为对象可能都有两个键,但键不同。

您可以考虑使用Array.prototype.every作为属性值比较部分。它是有效的,因为它在第一次不匹配时返回false,而不是在不需要的时候遍历所有属性:

var personA = {name: "Josh Kloss", age: 33};
var personB = {name: 'Josh Kloss', age: 43};
// Return true if objects a and b have the same properties
// with the same values. Otherwise, false.
function compareTwoPeople(a, b) {
  var person1 = Object.keys(a);
  var person2 = Object.keys(b);
  // Use first test to initialise result
  var result = person1.length === person2.length;
  // If passed the first test, do the second
  if (result) {
    // Use every to test each value, returns false at first mismatch
    result = person1.every(function(prop){
      return a[prop] === b[prop];
    });
  }
  return result;
}
document.write('Are they the same? ' + compareTwoPeople(personA, personB));

您可以通过浏览每个属性进行比较,

var personA =
    {
        name: "Josh Kloss",
        age: 33
    };
var personB =
{
    name: 'Josh Kloss',
    age: 43
};
function getObjectSize(obj){
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
}
function isObjectsEqual(a, b){
    //check objects has equal length
    if(getObjectSize(a) !== getObjectSize(b)){
        return false;
    }
    //check properties are equal
    for (var key in a) {
        if (b.hasOwnProperty(key)){
            if(a[key] != b[key]){
                return false;
            }
        }
        else{
            return false;
        }
    }
    return true;
}
isObjectsEqual(personA, personB); //test function