Javascript 如何在没有ID的情况下获得与对象数组之间的差异
类似于和,我有一个对象数组,我想比较,然后得到这两个对象之间的差异。遗憾的是,我的对象不包含ID(在我需要调用函数的状态下,我也不能只给对象一个ID。)。我上面链接的示例依赖于使用对象ID进行比较,因此我无法使用这些解决方案。我的阵列如下所示:Javascript 如何在没有ID的情况下获得与对象数组之间的差异,javascript,arrays,Javascript,Arrays,类似于和,我有一个对象数组,我想比较,然后得到这两个对象之间的差异。遗憾的是,我的对象不包含ID(在我需要调用函数的状态下,我也不能只给对象一个ID。)。我上面链接的示例依赖于使用对象ID进行比较,因此我无法使用这些解决方案。我的阵列如下所示: var array1 = [{person1ID: 46, person2ID: 47, value: "test"}, {person1ID: 38, person2ID: 56, value: "test2"}]; var array2 = [{pe
var array1 = [{person1ID: 46, person2ID: 47, value: "test"}, {person1ID: 38, person2ID: 56, value: "test2"}];
var array2 = [{person1ID: 46, person2ID: 47, value: "test"}];
在本例中,我希望获得对象{person1ID:38,person2ID:56,值:“test2”}
,因为它在array1中,而不是在array2中
如果数组中的对象没有ID,是否有任何方法可以比较这两个数组并获得差异?如果所有对象的属性都相同,则可以执行类似操作
var array1=[{person1ID:46,person2ID:47,值:“test”},{person1ID:38,person2ID:56,值:“test2”}];
var array2=[{person1ID:46,person2ID:47,值:“test”}];
功能比较阵列(arr2){
返回函数(当前){
返回arr2。过滤器(功能(arr1){
返回arr1.value==current.value&&arr1.person1ID==current.person1ID&&arr1.person2ID==current.person2ID;
}).长度==0;
}
}
var结果=数组1.过滤器(比较数组(数组2))
console.log(结果)
只需检查array2中至少有一些el,其中每个键等于array1中的对象。您可以使用嵌套方法,该方法可以检查第一个数组的每个对象,并使用第二个数组的每个对象,按属性进行检查 函数getDifference(array1,array2){ 变量键=['person1ID','person2ID','value']; 返回阵列1.过滤器(函数(a){ return!array2.some(函数b){ 返回键。每个(函数(k){ 返回a[k]==b[k]; }); }); }); } console.log(getDifference( [{person1ID:46,person2ID:47,值:“test”},{person1ID:38,person2ID:56,值:“test2”}], [{person1ID:46,person2ID:47,值:“test”}]
));代码>以下是我对这个问题的看法:
function对象functionallyidential(a,b){
//如果它们是同一个对象
如果(a==b){
返回true;
}
//拿到钥匙
var keysA=Object.keys(a);
var keysB=对象。键(b);
//如果密钥数量不相同,则返回false
if(keysA.length!=keysB.length){
返回false;
}
//获取唯一密钥
var uniqueKeys=keysA
.concat(键B)
.过滤器(功能(值、索引、arr){
返回值(arr.indexOf(value)=索引);
});
//按键循环
对于(var-keyIndex=0;keyIndex log(listofObjectsFunctionallyIndentical(arr2,arr3))//2不匹配(objc、objd)
您能否确保在数组之外创建对象?如果是,则可以通过扩展对象列表来比较对象。检查此选项,我认为这是最好的解决方案,但是为什么不使用find
而不是some
?最终一场比赛就足够了。我错了吗?@MarcoLuzzara,find返回找到的项,这在这里不是必需的,因为我们需要一个布尔值<代码>某些与此目的最匹配。
var result=array1.filter(function(el,i){
return !array2.some(
el2=>Object.keys(el).every(
key=>el2[key]&&el[key]===el2[key]
)
)
});