JavaScript如何筛选userpid不在另一对象数组中的元素
正确实现方式
优先推荐先提取第二个数组的userpid为Set集合再做筛选,时间复杂度更低,适合大数组场景:
// 先提取array2所有的userpid存入Set,查找效率为O(1) const userPidSet = new Set(array2.map(item => item.userpid)) // 筛选array1中userpid不在Set中的元素 const result = array1.filter(item => !userPidSet.has(item.userpid))
原代码错误原因
some()方法返回的是布尔值,仅用于判断数组是否存在满足条件的元素,不能用来做数组筛选,筛选数组需要用filter()方法array2.filter(y=>y.userpid)返回的是array2中携带userpid属性的对象数组,直接拿单个userpid字符串和数组做不等比较逻辑完全不成立,也会触发语法/逻辑错误
如果不想用Set,也可以直接用两层判断实现,仅适合小数组场景:
const result = array1.filter(x => !array2.some(y => y.userpid === x.userpid))
内容的提问来源于stack exchange,提问作者C Sharper
相关产品推荐
相关产品推荐

