我工作场所的组合和排列

时间:2015-09-23 14:13:20

标签: javascript

我正在为我的工作场所构建一个支架计算器,使用HTML和Javascript,除了一些造型之外我几乎完成了它。除了使用大量ifelse 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));

0 个答案:

没有答案