首页 > 解决方案 > Javascript - 从对象数组中减去总数的最佳逻辑/性能方面

问题描述

我正在尝试为这种逻辑想出更好的方法。基本上,我有 3 层。每一层都有一个限制数量。例如:

对于第 1 层,限制为 5 对于第 2 层,限制为 8 对于第 3 层,限制为 15。

[
            { title: 'Tier I', amount: 5, fullfiled: x, price: 10 },
            { title: 'Tier II', amount: 8, fullfiled: y, price: 20 },
            { title: 'Tier III', amount: 15, fullfiled: z, price: 30 },
]

来自我后端的只是总计。所以让我们假设它返回 10。我需要得到差异来确定用户在哪一层。在这种情况下,第 2 层,因为对于第 1 层,将满足 5 的限制。对于第 2 层,将仅满足 5 / 8,因此Y将为3,如下所示:

我需要得到这些限制之间的差异,以便我可以用数字替换 X、Y 和 Z。我想要一个优雅的方法来解决这个问题的建议。我试图有一个有限制的数组并减去以获得差异。例如:

let totalCompleted = 10;
const limitTier = [5, 8, 15] 

limitTier.map(value => {
   // logic ? totalCompleted - value;
})

标签: javascriptlogices6-promise

解决方案


尝试使用 reducer 而不是 map。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

与此类似的东西:

const { tiers } = [
  { title: 'Tier I', amount: 5, price: 10 },
  { title: 'Tier II', amount: 8,  price: 20 },
  { title: 'Tier III', amount: 15,  price: 30 },
].reduce(({ rest, tiers } , tier) => ({
  rest: Math.max(rest - tier.amount, 0),
  tiers: [
    ...tiers,
    {
      ...tier,
      fullfiled: Math.min(tier.amount, rest),
    }
  ]
}), { rest: 10, tiers: [] })

推荐阅读