JavaScript ES6+ 如何对比两个对象数组指定字段校验全部匹配
问题根源
你的原有逻辑搞反了校验主体:当前代码是校验allAuthUsers里的每一个用户id都存在于allProfileUsers的auth_user_id中,你给出的示例数据里allAuthUsers有个id为fea4c570-31ac-11ec-81f6-9b65b19a8154的用户(user1),在allProfileUsers里没有对应关联,所以才会返回false。
正确实现
基础写法(直接数组方法匹配)
直接把遍历主体换成allProfileUsers即可,符合你要的箭头函数单行写法:
const allMatched = allProfileUsers.every(pu => allAuthUsers.some(au => au.id === pu.auth_user_id));
高性能写法(大数组场景推荐)
如果两个数组数据量较大,先用Set存储allAuthUsers的所有id,再做校验,时间复杂度更低:
const authUserIdSet = new Set(allAuthUsers.map(au => au.id)); const allMatched = allProfileUsers.every(pu => authUserIdSet.has(pu.auth_user_id));
这种写法避免了内层循环遍历整个allAuthUsers数组,数据量越大性能优势越明显。
内容的提问来源于stack exchange,提问作者Tsar Bomba
相关产品推荐
相关产品推荐

