如何判断对象数组的id属性集合与固定字符串数组完全相等
数组匹配校验逻辑实现
基础定义
现有两个待校验数组:
- 固定值数组
fixed:存储目标id集合,内容固定不变,示例:
fixed = ["123","456","789"]
- 可变对象数组
variableArray:每个元素为包含id字段的对象,内容可变动,示例:
variableArray = [{name:"Joe",id:"123"},{name:"Joe",id:"456"},{name:"Joe",id:"789"}]
校验规则
同时满足以下两个条件时返回true,否则返回false:
variableArray的长度与fixed完全一致variableArray所有元素的id值恰好和fixed的所有元素完全匹配,无多余、无缺失
不合法场景示例
场景1:长度不一致
fixed=["123","456","789"] variableArray=[{name:"Joe",id:"456"},{name:"Joe",id:"789"}]
返回false,variableArray长度比fixed短,缺少id为"123"的元素。
场景2:长度一致但id不匹配
fixed=["123","456","789"] variableArray=[{name:"Joe",id:"123"},{name:"Joe",id:"456"},{name:"Joe",id:"001"}]
返回false,虽然长度相同,但variableArray不存在id为"789"的元素,同时存在不在fixed中的id值"001"。
代码实现(JavaScript)
不要求id顺序匹配
只要两个数组的id集合完全重合即可,不受元素排序影响:
function checkMatch(fixed, variableArray) { // 优先校验长度,不匹配直接返回false if (fixed.length !== variableArray.length) return false const fixedIdSet = new Set(fixed) const usedIdSet = new Set() for (const item of variableArray) { const currentId = item.id // 存在不在fixed中的id直接返回false if (!fixedIdSet.has(currentId)) return false // variableArray存在重复id直接返回false if (usedIdSet.has(currentId)) return false usedIdSet.add(currentId) } return true }
要求id顺序完全匹配
要求variableArray第N个元素的id必须和fixed第N位的元素完全一致:
function checkMatchWithOrder(fixed, variableArray) { if (fixed.length !== variableArray.length) return false return fixed.every((fixedId, index) => variableArray[index].id === fixedId) }
内容的提问来源于stack exchange,提问作者spring00
相关产品推荐
相关产品推荐

