注意事项:
- 我这里是通过name字段匹配的,可以换成自己需要的字段
- 如果没有父子关系,可以只使用父级
fatherResult
的结果
function getArrayDifference(array1, array2) {
// 父级结果
var uniqueResultOne = array1.filter(function (obj) {
return !array2.some(function (obj2) {
return obj.name == obj2.name;
});
});
var uniqueResultTwo = array2.filter(function (obj) {
return !array1.some(function (obj2) {
return obj.name == obj2.name;
});
});
var fatherResult = uniqueResultOne.concat(uniqueResultTwo);
// 子级children结果
let childrenResult = [];
array1.forEach((element, index) => {
const { children } = element || {}
const uniqueResultChildren = children.filter(function (obj) {
return !array2[index].children.some(function (obj2) {
return obj.name == obj2.name;
});
});
childrenResult.push(...uniqueResultChildren)
});
array2.forEach((element, index) => {
const { children } = element || {}
const uniqueResultChildren = children.filter(function (obj) {
return !array1[index].children.some(function (obj2) {
return obj.name == obj2.name;
});
});
childrenResult.push(...uniqueResultChildren)
});
// 合并结果
const result = fatherResult.concat(childrenResult)
return result;
}
使用如下:
const array1 = [
{
name: '小马', age: 18, sex: '女',
children: [
{ name: '小李', age: 12, sex: '男' },
{ name: '小韩', age: 16, sex: '女' },
]
},
{
name: '小贺', age: 18, sex: '女',
children: [
{ name: '梅梅', age: 16, sex: '女' },
]
},
{ name: '饭饭', age: 13, sex: '女', children: [] },
]
const array2 = [
{
name: '小马', age: 18, sex: '女',
children: [
{ name: '小李', age: 12, sex: '男' },
{ name: '小韩', age: 16, sex: '女' },
{ name: '小范', age: 16, sex: '女' },
]
},
{
name: '小贺', age: 18, sex: '女',
children: [
{ name: '丽丽', age: 16, sex: '女' },
]
},
{ name: '小张', age: 13, sex: '男', children: [] },
]
// 调用方法
getArrayDifference(array1, array2)
打印结果如下: