javascript - 如何在javascript React中找到两个对象数组之间的所有交集?
问题描述
我有两个对象数组。数组可以是任意长度。例如,我的第一个数组“详细信息”由三个对象组成,
let details = [
{a: 1, b: 200, name: "dad"},
{a:2, b: 250, name: "cat"},
{a:3, b: 212, name: "dog" }
]
第二个数组由四个对象组成:
let certs = [
{id: 991, b: 250, dn: "qwerty", sign: "GOST"},
{id: 950, b: 251, dn: "how", sign: "RSA" },
{id: 100, b: 250, dn: "how are", sign: "twofish" },
{id: 957, b: 212, dn: "how you", sign: "black" }
]
如何通过对象的某些属性(例如通过 'b' )获取包含所有交集的数组?
我的意思是我想从“certs”数组中获取过滤后的数组,它只包含三个对象而不是四个。
因为 certs 数组中索引 1 处的元素具有等于 251 的属性“b”。但是“详细信息”数组没有属性 b 等于 251 的对象。
所以我过滤的证书数组应该只包含三个对象。如何实施?
我尝试了 lodash 方法,但没有一个适合。例如:
_.intersectionBy(certs, details, 'b')
只给我这个:
0: {id: 991, b: 250, dn: "qwerty", sign: "GOST"}
1: {id: 957, b: 212, dn: "how you", sign: "black"}
length: 2
该对象不存在于最终数组中:
{id: 100, b: 250, dn: "how are", sign: "twofish" }
解决方案
只需使用filter()方法两次:
let details = [
{a: 1, b: 200, name: "dad"},
{a:2, b: 250, name: "cat"},
{a:3, b: 212, name: "dog" }
]
let certs = [
{id: 991, b: 250, dn: "qwerty", sign: "GOST"},
{id: 950, b: 251, dn: "how", sign: "RSA" },
{id: 100, b: 250, dn: "how are", sign: "twofish" },
{id: 957, b: 212, dn: "how you", sign: "black" }
]
const result = certs.filter(cert => {
let arr = details.filter(detail => detail.b === cert.b)
return !(arr.length === 0)
});
console.log(result)
推荐阅读
- javascript - 具有两位数的计数器应用程序中的递减/递增逻辑
- mysql - 一般 InnoDB UPDATE 是否会锁定整个表并阻止传入的特定 UPDATE?
- r - 包更新后的闪亮错误:未知的“组合”类型
- python - discord.py:试图等待作者回复并回答
- python - 使用 python 请求在 web.whatsapp 中进行授权
- python - Pytorch:从网格传递到图像坐标约定以使用 grid_sample
- http - Curl 和 Golang 中的不同请求状态(200 和 403)
- redis - Redis 键空间通知仅检测新创建的键而不是替换
- swift - Swift 中 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 的相等填充是多少?
- html - 添加 justify-content:space-around 时 li 之前的空白