Javascript 基于js的匹配算法

Javascript 基于js的匹配算法,javascript,node.js,typescript,algorithm,Javascript,Node.js,Typescript,Algorithm,我有一个对象列表,我正试图与一个特定的对象匹配,我正在寻找一个有效的算法来实现这一点。我已经尝试了很多方法,但我似乎做得不对。 所以,基本上让我们假设一个苹果买家想要以特定的价格购买苹果,他去市场寻找买家,然后可以匹配他的最高价格或更低的价格来完成他的数量。可以有尽可能多的交易者来完成他的交易 // apple buyer appleBuyer: { item: "apple", maxPricePerApple: $2.00, quantityToTrade: 200, q

我有一个对象列表,我正试图与一个特定的对象匹配,我正在寻找一个有效的算法来实现这一点。我已经尝试了很多方法,但我似乎做得不对。 所以,基本上让我们假设一个苹果买家想要以特定的价格购买苹果,他去市场寻找买家,然后可以匹配他的最高价格或更低的价格来完成他的数量。可以有尽可能多的交易者来完成他的交易

// apple buyer
appleBuyer: {
item: "apple",
maxPricePerApple: $2.00,
quantityToTrade: 200,
quantityRemainingAfterTrade: 200,
quantityRemoved: 0 
}
注意事项:

允许部分交易:苹果交易员可能无法完全完成交易,这很好

交易者只应与低于其限额的人进行交易,如果当时没有苹果交易者进行销售,则交易不得超过一分钱

买家可以根据需要与尽可能多的交易员进行交易,前提是他们能够完成交易

返回交易的价值。例如:交易运行可以返回:

buyer:{
item: "apple",
maxPricePerApple: $2.00,
quantityToTrade: 200,
quantityRemainingAfterTrade: 100,
quantityRemoved: 100
},
traders:[{
item: "apple",
sellingPricePerApple: $1.50,
quantitySelling: 50,
quantitySold: 50,
quantityRemaining: 0
},
{
item: "apple",
sellingPricePerApple: $2.00,
quantitySelling: 100,
quantitySold: 50,
quantityRemaining: 50
}
}
]
因此,基本上你是在试图用低于或等于买方限价的可用交易者价格来填充买方订单

几天来,我一直在试图找到一个足够的算法来解决这个问题,但我似乎找不到任何接近的算法。拜托,我需要帮助。
谢谢。

算法应该相当简单

  • 过滤掉任何要求过高的卖家
  • 先按最便宜的分类
  • 把苹果摘下来,直到你完成订单或者卖完为止
  • const appleBuyer={
    项目:“苹果”,
    MaxPricePerApp:2.00,
    数量贸易:200,
    交易后数量:200,
    quantityRemoved:0
    }
    常量appleTraders=[{
    项目:“苹果”,
    销售价格苹果:1.50,
    数量销售:100,
    售出数量:0,
    数量:100
    },
    //以下交易者没有交易,因为他的价格高于买家的限价
    {
    项目:“苹果”,
    销售价格苹果:2.50,
    数量销售:10,
    售出数量:5,
    数量:5
    },
    {
    项目:“苹果”,
    销售价格苹果:2.00,
    数量销售:4,
    售出数量:0,
    数量:4
    }
    ];
    const possibleTraders=appleTraders.filter(x=>x.sellingPricePerApple a.sellingPricePerApple-b.sellingPricePerApple);
    
    例如(让i=0;i)您的第一个和第二个示例似乎不匹配
    buyer:{
    item: "apple",
    maxPricePerApple: $2.00,
    quantityToTrade: 200,
    quantityRemainingAfterTrade: 100,
    quantityRemoved: 100
    },
    traders:[{
    item: "apple",
    sellingPricePerApple: $1.50,
    quantitySelling: 50,
    quantitySold: 50,
    quantityRemaining: 0
    },
    {
    item: "apple",
    sellingPricePerApple: $2.00,
    quantitySelling: 100,
    quantitySold: 50,
    quantityRemaining: 50
    }
    }
    ]