我有两个数据array object
。array1
有 112 条记录,其中orgName ="ABC"
和array2
有 102 条记录再次orgName ="ABC"
。我想从 array2 中不存在的array1
中获取额外的 10 条arrayNew
记录。
我试过这个,但它给了我总记录,无论orgName
如何,我如何为orgName
申请where
或filter
。
let arrayNew = array1.filter( ( el ) => !array2.includes( el ) );
我该怎么做? 另外,谁能告诉我这叫什么intersection
?
这就是我的数据的外观
array1=
{
"orgId": 101,
"orgGN": "ABC",
"dId": 494,
"name": "Test1",
},
{
"orgId": 102,
"orgGN": "ABC",
"dId": 442,
"name": "Test2",
},
{
"orgId": 103,
"orgGN": "ASR",
"dId": 494,
"name": "Test3",
},
array2=
{
"orgId": 101,
"orgGN": "ABC",
"dId": 494,
"name": "Test1",
},
{
"orgId": 105,
"orgGN": "PDC",
"dId": 420,
"name": "Test5",
},
{
"orgId": 106,
"orgGN": "ASR",
"dId": 44,
"name": "Test6",
},
预期操作
{
"orgId": 102,
"orgGN": "ABC",
"dId": 442,
"name": "Test2",
},
看起来我们这里有组合键,例如orgId
和orgGN
.因此,在筛选项目时,可以使用Map
集合来O(n)
组合键具有时间复杂度:
let array1 = [
{
"orgId": 101, "orgGN": "ABC", "dId": 494,
"name": "Test1",
},
{
"orgId": 102, "orgGN": "ABC", "dId": 442, /* +++*/
"name": "Test2",
},
{
"orgId": 103, "orgGN": "ASR", "dId": 494,
"name": "Test3",
}];
let array2 =
[{
"orgId": 101, "orgGN": "ABC", "dId": 494,
"name": "Test1",
},
{
"orgId": 105, "orgGN": "PDC", "dId": 420,
"name": "Test5",
},
{
"orgId": 106, "orgGN": "ASR", "dId": 44,
"name": "Test6",
}];
const uniqueItems = new Map(array2.map(s => [`${s.orgId}-${s.orgGN}` , s]));
const result = array1.filter(f=> !uniqueItems.get(`${f.orgId}-${f.orgGN}`) && f.orgGN == 'ABC');
console.log(result);
您可以创建一个array2
的orgId
数组,并按orgName
字段和所需值过滤array1
,如下所示:
array1 = [{
"orgId": 101,
"orgGN": "ABC",
"dId": 494,
"name": "Test1",
},
{
"orgId": 102,
"orgGN": "ABC",
"dId": 442,
"name": "Test2",
},
{
"orgId": 103,
"orgGN": "ASR",
"dId": 494,
"name": "Test3",
}
];
const array2 = [{
"orgId": 101,
"orgGN": "ABC",
"dId": 494,
"name": "Test1",
},
{
"orgId": 105,
"orgGN": "PDC",
"dId": 420,
"name": "Test5",
},
{
"orgId": 106,
"orgGN": "ASR",
"dId": 44,
"name": "Test6",
}
];
function intersection(array1, array2, field, value) {
const array2OrgIds = array2.map(item => item.orgId);
return array1.filter((el) => !array2OrgNames.includes(el.orgId) && el[field] === value);
}
console.log(intersection(array1, array2, "orgGN", "ABC"));
不确定数据的结构,但这将返回一个新数组,其中包含不在 array2 中但在 array1 中的对象,其 orgName 为 ABC:
const array1 = [
{
orgId: 101,
orgGN: "ABC",
dId: 494,
name: "Test1",
},
{
orgId: 102,
orgGN: "ABC",
dId: 442,
name: "Test2",
},
{
orgId: 110,
orgGN: "ABC",
dId: 596,
name: "Test10",
},
{
orgId: 103,
orgGN: "ASR",
dId: 494,
name: "Test3",
},
];
const array2 = [
{
orgId: 101,
orgGN: "ABC",
dId: 494,
name: "Test1",
},
{
orgId: 105,
orgGN: "PDC",
dId: 420,
name: "Test5",
},
{
orgId: 106,
orgGN: "ASR",
dId: 44,
name: "Test6",
},
];
const objArrayDiff = (array1, array2, fieldName, fieldValue) => {
return array1
.filter((item) => item[fieldName] === fieldValue)
.filter(
(item) =>
!array2
.filter((item) => item[fieldName] === fieldValue)
.some((array2Item) => array2Item.orgId === item.orgId)
);
};
console.log(objArrayDiff(array1, array2, "orgGN", "ABC"));