JS中如何判断对象数组某属性是否包含另一个数组的所有元素
需求说明
你需要验证纯值数组的所有元素,都存在于对象数组的指定id属性中,对应测试数组如下:
// 待提取id的对象数组 let array1 = [ {id: 123, name: "Name of item"}, {id: 456, name: "Other name"} ] // 待匹配的纯值数组 let array2 = [123, 456]
解法1:小数据量场景(代码最简)
适合两个数组长度都不大的场景,一行代码即可实现:
const isAllExist = array2.every(targetId => array1.some(item => item.id === targetId))
- 逻辑说明:
every方法会校验array2的所有元素,只有全部元素都满足判断条件才会返回truesome方法遍历array1,只要找到一个id匹配的元素就返回true
- 注意:该方法时间复杂度为O(n*m)(n为array2长度,m为array1长度),数据量过大时性能较低。
解法2:大数据量场景(性能更优)
利用Set的O(1)查找特性优化性能,整体时间复杂度为O(n+m):
// 先提取array1所有id生成Set集合 const idSet = new Set(array1.map(item => item.id)) // 逐一校验array2的元素是否都在Set中 const isAllExist = array2.every(targetId => idSet.has(targetId))
在你给出的示例数组中,最终isAllExist的输出结果为true。
内容的提问来源于stack exchange,提问作者Josué Orozco
相关产品推荐
相关产品推荐

