You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:27:03