javascript - 如何通过应用where子句从基于特定类别的array2中获取array1中不可用的记录
问题描述
我有两个array object
数据。array1
在哪里有 112 条记录,orgName ="ABC"
又array2
是 102 条记录orgName ="ABC"
。我想从中获取额外的 10 条记录,这些记录arrayNew
在array1
array2 中不存在。
我试过这个,但它给了我总记录,不管orgName
我如何申请where
或filter
申请orgName
。
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
and 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);
推荐阅读
- c# - 当我正在收听 PictureBox 的 Resize 事件并为 PictureBox 提供新图像时,它不会调整大小
- asp.net - 如何防止存储的 XSS 来自 javascript 和 html 注入
- javascript - 引导新的 Strapi 角色权限
- c# - ToolWindow 似乎不尊重 AppBar
- java - java中后序图遍历的迭代版本
- ios - 为什么我的 WKWebView 的故事板表示看起来与在模拟器上运行的不同?
- reactjs - 如何在 React 中使用 useState Hook 调用 Parent 函数?
- python - 如何在单独的行中将python的输出写入文本文件?
- typescript - 使用 Typescript 时抑制 TS2305 模块没有导出成员错误
- c# - DynamoDb 条件插入