Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个对象并不能得到正确的结果_Javascript - Fatal编程技术网

Javascript 比较两个对象并不能得到正确的结果

Javascript 比较两个对象并不能得到正确的结果,javascript,Javascript,我试着比较两个物体。年龄不同,但仍然说他们是一样的。。 这是我的密码 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 = Ob

我试着比较两个物体。年龄不同,但仍然说他们是一样的。。 这是我的密码

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);
var人物角色=
{
姓名:“Josh Kloss”,
年龄:33
}
var personmB=
{
姓名:“Josh Kloss”,
年龄:43
}
函数比较运算符(a,b){
var person1=Object.keys(a);
var person2=Object.keys(b);
if(person1.length!==person2.length){
console.log(“它们不一样”);
}
否则{
对于(变量i=0;i
如何比较这两个对象。。。
谢谢。

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

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

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

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);
var人物角色=
{
姓名:“Josh Kloss”,
年龄:33
};
var personB=
{
姓名:“Josh Kloss”,
年龄:43
};
功能比较(a、b){
var aKeys=对象键(a),
b键=对象键(b);
如果(aKeys.length!=bKeys.length)返回false;
对于(变量i=0;i
您可以通过查看每个属性进行比较

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

您可以考虑使用属性值比较部分。它的效率很高,因为它在第一次不匹配时返回false,而不是在不需要时检查所有属性:

var personA={name:“Josh Kloss”,年龄:33};
var personB={name:'Josh Kloss',年龄:43};
//如果对象a和对象b具有相同的属性,则返回true
//具有相同的值。否则,错误。
函数比较运算符(a,b){
var person1=Object.keys(a);
var person2=Object.keys(b);
//使用第一个测试初始化结果
var result=person1.length==person2.length;
//如果通过了第一次测试,请进行第二次测试
如果(结果){
//使用each测试每个值,在第一次不匹配时返回false
结果=人员1.每个(功能)(道具){
返回a[prop]==b[prop];
});
}
返回结果;
}

写('他们是一样的吗?'+比较人(personA,personB))我认为如果键顺序不重要,那么使用“a[person1[I]!==b[person1[I]]将是better@Andy你能给我完整的密码吗。我是这里的初学者。