Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 如何在没有ID的情况下获得与对象数组之间的差异_Javascript_Arrays - Fatal编程技术网

Javascript 如何在没有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

类似于和,我有一个对象数组,我想比较,然后得到这两个对象之间的差异。遗憾的是,我的对象不包含ID(在我需要调用函数的状态下,我也不能只给对象一个ID。)。我上面链接的示例依赖于使用对象ID进行比较,因此我无法使用这些解决方案。我的阵列如下所示:

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;keyIndexlog(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]
     )
  )
});