我正在为我的工作场所构建一个支架计算器,使用HTML和Javascript,除了一些造型之外我几乎完成了它。除了使用大量if
和else if
之外,我还有一个Javascript部分需要完成
声明我正在努力。
我们使用承运公司发送货盘,他们按重量指定价格
四分之一托盘250公斤
半托盘500公斤
全托盘1250千克
1个托盘空间1200平方毫米
长度小于1200毫米,容易的,将是一个托盘空间
超过1200毫米然后托盘空间上升
例如
2000毫米将是2个托盘空间
3000毫米3托盘空间等。
到目前为止,我所能打到的墙很容易,如果我们发送使用多个空间的长度,找到最有效的方法来计算托盘空间的最佳组合。
e.g。
300公斤,3000毫米长,最有效的方式,3季度托盘空间=最大750公斤
800公斤,3000毫米长,最有效的方式,1个半托盘和2个四分之一托盘空间=最大1000公斤
等等。
在想到获得结果的方法后,我需要这是我到目前为止所提出的,非常感谢堆栈溢出/交换社区(组合和比较功能),我可能会将filteredResults& filteredWeights into对象并从中提取信息。我确信有更好的办法,但......
var items = [
{ palletDef: 'Q', palletWeight: 250 },
{ palletDef: 'H', palletWeight: 500 },
{ palletDef: 'F', palletWeight: 1250 }
];
var filteredResults = [];
var filteredWeights = []
var filterArray = [];
var maxWeight = 1750; //-- Maximum weight forklift can carry --\\
//Find all permutations
Array.prototype.combine = function combine(k){
var toCombine = this;
var last;
function combi(n, comb){
var combs = [];
for (var x=0, y=comb.length; x < y; x++){
for (var l = 0, m = toCombine.length; l < m; l++){
combs.push(comb[x] + toCombine[l]);
}
}
if (n < k-1){
n++;
combi(n, combs);
} else {
last = combs;
}
}
combi(1, toCombine);
return last;
}
// Sort permutations into unqiue combinations
function compare(a,b) {
var c = a.replace(/\W+/g, '').toLowerCase().split("").sort().join("");
var d = b.replace(/\W+/g, '').toLowerCase().split("").sort().join("");
return (c === d) ? d.toUpperCase() : 0;
}
function getWeight(key) {
for ( var i = 0, l = items.length; i < l; i++){
if(items[i].palletDef == key) return items[i].palletWeight;
}
}
// Find combinations of pallets
function findCombinations(pallets) {
var toCombine = [];
for ( var i = 0, l = items.length; i < l; i++) {
toCombine.push(items[i].palletDef);
}
//Get all permutations
var results = pallets > 1 ? toCombine.combine(pallets) : toCombine;
//Remove duplicate items
for (var i = 0, l = results.length; i < l; i++){
if(compare(results[i], results[i]) !=0) {
if(filterArray.length == 0) {
filterArray.push(results[i]); filteredResults.push(results[i]);
} else if(filterArray.indexOf(compare(results[i], results[i])) == -1) {
filterArray.push(compare(results[i], results[i]));
filteredResults.push(results[i]);
}
}
}
//Add up results
for (var i = 0, l = filteredResults.length; i < l; i++){
var palletsWeight = 0;
for (var a = 0, len = filteredResults[i].length; a < len; a++){
palletsWeight += getWeight(filteredResults[i].charAt(a));
}
filteredWeights.push(palletsWeight);
}
//Trim weights (for forklift)
for (var i = filteredWeights.length; i--;){
if(filteredWeights[i] > maxWeight) {
filteredResults.splice(i, 1);
filteredWeights.splice(i, 1);
}
}
return filteredResults +""+ filteredWeights;
}
console.log(findCombinations(3));