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

如何检查JavaScript对象指定key是否匹配嵌套值并更新quantity字段

方案说明

你现有的指定productId查询的逻辑本身时间复杂度就是O(1),已经是最优效率,所谓「效率低」其实是写法上有冗余,可以先把目标对象提前取出避免重复访问,优化后同时可以直接修改quantity属性:

场景1:已知要查询的key(productId)

// 提前取出目标对象,避免重复读取cart[productId]
const target = cart[productId]
if (
  target &&
  target.quantity >= 1 &&
  target.FirstName === FirstName &&
  target.LastName === LastName
) {
  // 直接修改属性即可,嵌套对象是引用类型,修改会直接生效
  target.quantity += 1
}

这里把==替换为严格相等===,可以避免隐式类型转换带来的非预期匹配问题。

场景2:不知道具体key,需要遍历所有条目找匹配项

如果你没有指定productId,需要从整个购物车中找出所有符合字段要求的条目,可以遍历对象值操作:

// 遍历所有条目修改所有匹配项
Object.values(cart).forEach(item => {
  if (item.quantity >= 1 && item.FirstName === FirstName && item.LastName === LastName) {
    item.quantity += 1
  }
})

// 只匹配第一个符合要求的条目
const matchedItem = Object.values(cart).find(item => 
  item.quantity >= 1 && item.FirstName === FirstName && item.LastName === LastName
)
matchedItem && (matchedItem.quantity += 1)

可扩展优化

如果后续需要匹配的字段变多,可以封装通用匹配函数,简化判断逻辑:

const matchItem = (item, conditions) => {
  return Object.entries(conditions).every(([key, rule]) => {
    return typeof rule === 'function' ? rule(item[key]) : item[key] === rule
  })
}

// 使用示例
const conditions = {
  FirstName: FirstName,
  LastName: LastName,
  quantity: val => val >= 1
}
const target = cart[productId]
if (target && matchItem(target, conditions)) {
  target.quantity += 1
}

内容的提问来源于stack exchange,提问作者pycode81

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:24:07