JavaScript的类似SQL的内部联接

问题描述 投票:-1回答:2

const products = [{
    id: 5,
    productName: "Logitech Mouse",
    unitprice: 35
  },
  {
    id: 6,
    productName: "Logitech Keyboard",
    unitprice: 40
  }
];

const cart = [{
  id: 101,
  userId: 3,
  productId: 5,
  quantity: 2
}];

totals = cart.reduce((r, {
      productId: id,
      quantity
    }) =>
    (r[id] = (r[id] || 0) + quantity, r), {}),
  result = products.map(({
    id,
    productName,
    unitprice
  }) => ({
    productName,
    unitprice,
    quantity: totals[id]
  }));

console.log(result)

当前,它打印两行而不是一行。因为cart中只有一行,所以不应打印第二行。我如何所谓的内部联接仅返回一个购物车ID为101的记录?

javascript
2个回答
0
投票

如果您要购物车中所有物品的总价,则需要:

  1. 通过购物车中的物品减少购物车
  2. 通过其ID查找产品
  3. 总计,产品的单价乘以购物车中的数量

const products = [{
  id: 5,
  productName: "Logitech Mouse",
  unitprice: 35
}, {
  id: 6,
  productName: "Logitech Keyboard",
  unitprice: 40
}];

const cart = [{
  id: 101,
  userId: 3,
  productId: 5,
  quantity: 2
}];

let total = cart.reduce((subtotal, item) => {
  let product = products.find(p => p.id === item.productId);
  return subtotal + product.unitprice * item.quantity;
}, 0);

console.log(total);

简短版:

let t = cart.reduce((s, i) => s + products.find(p => p.id === i.productId).unitprice * i.quantity, 0);

0
投票

我建议使用这样的map功能

const products = [{
    id: 5,
    productName: "Logitech Mouse",
    unitprice: 35
},
{
    id: 6,
    productName: "Logitech Keyboard",
    unitprice: 40
}
];

const cart = [{
    id: 101,
    userId: 3,
    productId: 5,
    quantity: 2
}];

result = cart.map(item => {
    const product = products.find(product => item.productId === product.id);
    return { id: item.id, quantity: item.quantity, productName: product.productName, unitprice: product.unitprice }
});

console.log(result);
© www.soinside.com 2019 - 2024. All rights reserved.