gpt4 book ai didi

javascript - 比较两个对象数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:04 24 4
gpt4 key购买 nike

我需要比较两个数组。如果我测试 Object1==Object2 我是在测试对象是否指向内存中的相同地址。我实际上想根据它们的属性值来比较它们。让我告诉你我的意思。

我有一个 javascript 类:

function MyClass(var1,var2,var3)
{
this.var1 = var1;
this.var2 = var2;
this.var3 = var3;
}

现在我将能够创建该类的新对象:

var myNewObject = new MyClass(1,"hello",3);

我将能够访问该对象的属性:

myNewObject.var2 = "New value";

我有两个数组:

 var array1 = new Array();
var array2 = new Array();

两个数组都填充了 MyClass 对象。换句话说,如果 array1 有 3 个元素,我知道它们是 MyClass 类型,这意味着我可以做类似的事情:array1[2].var1 = foo

*我想根据属性值比较 array1 和 array2 *

例如如果

   array1 = [ [1,"hello",4] , [0,"foo",5] ]; 

array2 = [ [0,"foo",5555] [1111,"hello",4]];

note: // [1,"hello",4] means a MyClass object with var1=1, var2="hello", var3 = 4

我希望有一种方法可以告诉我这些变化。在此示例中,var1 更改为 1111,var3 从 5 更改为 5555。

如果我花很多时间做这件事,我可能就能做到。我不太擅长算法,也许有一种简单的方法可以做到这一点。


编辑

我想知道我必须对 array1 进行哪些更改才能使其等于 array2。

最佳答案

“使其相等”听起来像 array1 = array2.slice(0),但这似乎不是您想要的。所以请尝试以下操作:

for (var i=0, l=Math.max(array1.length, array2.length); i<l; i++) {
if (! array1[i]) {
alert("You need to make a copy of "+array2[i]);
continue;
}
if (! array2[i]) {
alert("You need to delete "+array1[i]);
continue;
}
for (var j in array2[i]) {
if (array2.hasOwnProperty(i)) // needed only when MyClass has a prototype with enumerable properties
if (array1[i][j] !== array2[i][j])
alert("You need to change "+j+" of "+array1[i]);
}
}

关于javascript - 比较两个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com