筛选和比较两个项目的列表
Filtering and Comparing List of Two Items
这是一个Sails.js和Node.js应用程序。我正在努力解决我遇到的一个问题。我不知道该怎么解它。这就是为什么我的问题的标题与它不太相符。
但是,这就是场景。我:
订单列表
{
"vehicleType": "30tonne",
"waybill": "7006722988",
"obdCreationDate": "01/11/16 1:21:50 PM",
"route": "5817895991a297ccb386469d",
"source": "agbara",
"destination": "ilorin",
"batchNumber": "ebf96f3322320fb2bedb7bf126f87ab8367f5bd6061cde78ab300e464df2c7af"
},
{
"vehicleType": "30tonne",
"waybill": "7006691063",
"obdCreationDate": "01/11/16 1:21:50 PM",
"route": "5817895e91a297ccb38646d9",
"source": "agbara",
"destination": "katsina",
"batchNumber": "ebf96f3322320fb2bedb7bf126f87ab8367f5bd6061cde78ab300e464df2c7af"
},
我有这个:
转运蛋白列表
{
"vehicles": [
{
"assetIdentification": "EWEW",
"vehicleType": "na",
"transporter": "5817891891a297ccb38645c1",
"organization": "5817878612a8dce1b2e4d359",
"status": "available",
"isDeleted": false,
"createdAt": "2016-10-31T18:20:32.963Z",
"updatedAt": "2016-10-31T18:20:32.963Z",
"id": "5800c3cc391eaa0709cffee5"
},
{
"assetIdentification": "RERE",
"vehicleType": "na",
"transporter": "5817891891a297ccb38645c1",
"organization": "5817878612a8dce1b2e4d359",
"status": "available",
"isDeleted": false,
"createdAt": "2016-10-31T18:20:32.965Z",
"updatedAt": "2016-10-31T18:20:32.965Z",
"id": "5800c4d9391eaa0709cffee6"
}
],
"rates": [
{
"fixedCost": 280759,
"variableCost": 0,
"vehicleType": "30tonne",
"organization": "5817878612a8dce1b2e4d359",
"route": "5817894b91a297ccb38645f9",
"transporter": "5817891891a297ccb38645c1",
"tripType": "normal",
"active": true,
"isDeleted": false,
"totalCost": 280759,
"createdAt": "2016-10-31T18:14:33.668Z",
"updatedAt": "2016-10-31T18:14:33.668Z",
"id": "58178a093ee3f7ffb3b14a47",
"_route": "5817894b91a297ccb38645f9"
},
{
"fixedCost": 280759,
"variableCost": 0,
"vehicleType": "30tonne",
"organization": "5817878612a8dce1b2e4d359",
"route": "5817894b91a297ccb38645fa",
"transporter": "5817891891a297ccb38645c1",
"tripType": "normal",
"active": true,
"isDeleted": false,
"totalCost": 280759,
"createdAt": "2016-10-31T18:14:33.866Z",
"updatedAt": "2016-10-31T18:14:33.866Z",
"id": "58178a093ee3f7ffb3b14a66",
"_route": "5817894b91a297ccb38645fa"
}
],
"organization": "5817878612a8dce1b2e4d359",
"name": "Some Organization",
"email": "sosoos@soso.so",
"phone": "8392398293829",
"active": true,
"isDeleted": false,
"slug": "some-orgs",
"createdAt": "2016-10-31T18:10:32.623Z",
"updatedAt": "2016-10-31T18:10:32.623Z",
"id": "5817891891a297ccb38645c1"
}
上面的记录(Transporters)大于9000,每个Transporters的rates
大于200。在此之前的(ORDERS)可以是任意大小。
所以,这就是问题所在。每个阶都有routeId
和vehicleType
。转运体有Array of vehicles with vehicleSize (s)
, Array of rates which each have rateId, vehicleType and totalCost(Cost for that route)
。我试图解决的问题是获得最便宜的完成所有订单的速率,即使给每个运输商分配一个订单会使它变得便宜。我写了一个循环中的循环来做各种形式的组合它得到了最便宜的。但是,针对30 Orders
运行它会使应用程序不可用于任何其他请求,并且使用7GB专用RAM,我们仍然会时不时地耗尽内存,并且由于JavaScript
是同步的,这肯定会使应用程序运行的端口无用,除非它完成了该操作。30 Orders
需要30分钟到1小时。
Permutation
和Combination
是否可以解决它,但没有。我不是在找一个完整的书面解决方案。我只是需要关于做什么和如何去做的建议。任何帮助都将非常感激。谢谢。 这是一个经典的a *寻路任务。为了优化,你应该创建反向索引[vehicleType,route]=>[vehicle],对于每一个vehicleType和route的组合,它需要通过所有速率进行一次迭代,例如O(r)。然后通过每个订单,你可以从索引中分配相关的车辆。它没有考虑到活动和可用标志,同一辆车可能会被分配多个订单,但是用价格订购的结果车辆数组扩展上述索引将很容易改进。
反向索引最好通过map-reduce在数据库端建立。不过您也可以在节点中构建它:
let ratesByRouteVType = []
transporters
.rates
.forEach(r => {
let cmpRate = ratesByRouteVType[r.route+r.vehicleType]
if(!cmpRate || cmpRate.totalCost>r.totalCost)
ratesByRouteVType[r.route+r.vehicleType]=r
})
- 如何使用仅显示/查看两个项目的甘特图
- Javascript 库,一次包含两个项目
- 请问JavaScript中的两个项目有什么区别
- 下划线.js,从一个对象中获取两个项目并添加到顶部
- Javascript localStorage unshift 数组在两个项目后停止追加
- Maven结合了两个项目
- 缩放两个项目
- 在同一集合中添加两个项目
- 下拉|材料设计|两个项目|重叠
- select2.js-如何在选项元素内对齐两个项目
- 筛选和比较两个项目的列表
- 猫头鹰旋转木马,一次滚动两个项目
- 如何排序json与两个项目
- 当两个项目被选中时创建一个效果
- . net WebApp中的下拉列表-是否可以在列表中的一个或两个项目下划下划线?
- 在两个项目之间共享组件,同时保留热加载
- 在图像和标尺之间对齐两个项目
- jQuery类选择器-我可以瞄准两个项目
- Ember.js:View在呈现前两个项目后停止更新
- 一个容器中两个项目的延迟效应自动化