JS如何比较两个对象数组并校验capacity是否超出允许值
JS数组同id对象容量校验实现方案
该需求完全可以实现,具体实现思路如下:
- 先把
allowedValues转换为以id为键、允许容量为值的映射结构,避免校验时反复遍历数组查询,提升运行效率 - 遍历
values数组的每一项,匹配映射中对应的id:如果匹配到且当前项的capacity超过允许值,就按照要求构造错误对象推入结果集即可
完整实现代码如下:
const values = [ { id: "c22d8560-2d42-45c0-9ca0-91a4eabd193d", capacity: 8 }, { id: "be63bd14-f448-4dc4-8087-3b895095d0bc", capacity: 6 }, { id: "djkfu4-xvvxvx-4344-sddsd", capacity: 1 } ] const allowedValues = [ { id: "c22d8560-2d42-45c0-9ca0-91a4eabd193d", capacity: 3 }, { id: "be63bd14-f448-4dc4-8087-3b895095d0bc", capacity: 2 } ] // 构造允许容量映射表 const allowedMap = new Map(allowedValues.map(item => [item.id, item.capacity])) // 校验生成错误结果 const errorResult = values.reduce((acc, cur) => { const allowedCap = allowedMap.get(cur.id) if (allowedCap !== undefined && cur.capacity > allowedCap) { acc.push({[cur.id]: `Allowed capacity is ${allowedCap}`}) } return acc }, []) console.log(errorResult) // 输出结果和要求完全一致: // [ // { 'c22d8560-2d42-45c0-9ca0-91a4eabd193d': 'Allowed capacity is 3' }, // { 'be63bd14-f448-4dc4-8087-3b895095d0bc': 'Allowed capacity is 2' }, // ]
如果运行环境不支持Map,也可以用普通对象实现映射:
const allowedMap = {} allowedValues.forEach(item => allowedMap[item.id] = item.capacity) // 校验逻辑仅调整取值方式即可 const errorResult = values.reduce((acc, cur) => { const allowedCap = allowedMap[cur.id] if (allowedCap !== undefined && cur.capacity > allowedCap) { acc.push({[cur.id]: `Allowed capacity is ${allowedCap}`}) } return acc }, [])
内容的提问来源于stack exchange,提问作者lecham
相关产品推荐
相关产品推荐

