js往原数组中添加新对象,相同就指定值+1,不相同就直接加进去

发布于 2022-09-12 23:19:32 字数 444 浏览 14 评论 0

var param = [
    {
        id: 227901,
        goodsName: '苏泊尔石锅',
        goodsUnitName: '件',
        quantity: 1,
    },
    {
        id: 227900,
        goodsName: '宜家小推车',
        goodsUnitName: '件',
        quantity: 1,
    }
]

var a = [
    {
        id: 228196,
        goodsName: '笔筒',
        goodsUnitName: '个',
        quantity: 1,
    }
]

param是原有数组,a为新数组,往param中添加a,如果param中没有a就新增进去,如果有,quantity+1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

御弟哥哥 2022-09-19 23:19:32
const merge = (s1, s2) => {
  const map = new Map()
   
  for(let i = 0; i < s1.length; ++i) {
    map.set(s1[i].id, s1[i])
  }

  for(let i = 0; i < s2.length; ++i) {
    if(map.has(s2[i].id)) map.get(s2[i].id).quantity++
    else map.set(s2[i].id, s2[i])
  }

  return Array.from(map.values())
}
野却迷人 2022-09-19 23:19:32
function merge(target, source) {
    const targetIds = target.reduce((res,v) => res.add(v.id),new Set());
    const sourceIds = source.reduce((res,v) => res.add(v.id),new Set());
    target.forEach(v => sourceIds.has(v.id) && v.quantity++)
    return target.push(...source.filter(v => !targetIds.has(v.id)))
}
merge(param, a)
凉城已无爱 2022-09-19 23:19:32

两个问题觉得需要注意

  1. id建议使用字符串,而不是直接位整数,这样防止过长的数字串在一些处理中被转换,造成bug
  2. 对于已有的建议是增加quantity数量为a中对应的,而不是简单加1.

    const merge = (s1, s2) => {
      const map = new Map()
    
      for(let i = 0; i < s1.length; ++i) {
     map.set(s1[i].id, s1[i])
      }
    
      for(let i = 0; i < s2.length; ++i) {
     if(map.has(s2[i].id)) map.get(s2[i].id).quantity=map.get(s2[i].id).quantity + s2[i].quantity
     else map.set(s2[i].id, s2[i])
      }
    
      return Array.from(map.values())
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文