js實現從陣列中獲取相加和為指定數字的元素
此功能其實具有很大的現實意義,下面就做一下簡單介紹。
比如我們經常在網上或者在一些店鋪購買東西,如果你首先購買了200元的東西,但是如果消費總額需要達到300元才能夠有八折優惠,那麼就需要再消費100元素,這個時候那些購物網站或者店鋪的一些裝置就會給出幾種推薦方案,會推薦您購買幾種商品價格其恰好在100元左右,下面就是能夠實現類似功能的程式碼:
[JavaScript] 純文字檢視 複製程式碼function getCombBySum(array,sum,tolerance,targetCount){ var util = { getCombination: function(arr, num) { var r=[]; (function f(t,a,n){ if (n==0){ return r.push(t); } for (var i=0,l=a.length; i<=l-n; i++){ f(t.concat(a[i]), a.slice(i + 1), n - 1); } })([],arr,num); return r; }, getArrayIndex: function(array) { var i = 0, r = []; for(i = 0;i<array.length;i++){ r.push(i); } return r; } },logic = { init: function(array,sum) { var _array = array.concat(), r = [], i = 0; _array.sort(function(a,b){ return a - b; }); for(i = 0;i<_array.length;i++){ if(_array[i]<=sum){ r.push(_array[i]); } else{ break; } } return r; }, core: function(array,sum,arrayIndex,count,r){ var i = 0, k = 0, combArray = [], _sum = 0, _cca = [], _cache = []; if(count == _returnMark){ return; } combArray = util.getCombination(arrayIndex,count); for(i = 0;i<combArray.length;i++){ _cca = combArray[i]; _sum = 0; _cache = []; for(k = 0;k<_cca.length;k++){ _sum += array[_cca[k]]; _cache.push(array[_cca[k]]); } if(Math.abs(_sum-sum) <= _tolerance){ r.push(_cache); } } logic.core(array,sum,arrayIndex,count-1,r); } }, r = [], _array = [], _targetCount = 0, _tolerance = 0, _returnMark = 0; _targetCount = targetCount || _targetCount; _tolerance = tolerance || _tolerance; _array = logic.init(array,sum); if(_targetCount){ _returnMark = _targetCount-1; } logic.core(_array,sum,util.getArrayIndex(_array),(_targetCount || _array.length),r); return r; } var arr=[1,10,20,5,30,20,15,24,3,27,80]; console.log(getCombBySum(arr,150,1,4))
上面的程式碼演示了相關的功能,下面對程式碼的功能做一下簡略的介紹:
函式的引數:
1.array:一個陣列,在上面的程式碼中,就是商品的價格。
2.sum:要獲取的價格總和。
3.tolerance:容差,也就是說可以允許的誤差範圍,如果此引數省略,那麼就必須準確等於sum值。
4.targetCount:物品的數量,例如4,也就是4件商品的價格大約等於100元,如果省略的話將會列出所有可能。
相關文章
- js如何獲取指定元素在陣列中個數JS陣列
- js如何獲取指定陣列元素在陣列中的索引值JS陣列索引
- javascript如何獲取指定元素在陣列中的數目JavaScript陣列
- jquery實現的獲取指定元素指定型別元素數目jQuery型別
- js獲取陣列元素中的最大值和最小值JS陣列
- js獲取陣列中元素出現的次數程式碼例項JS陣列
- js刪除陣列元素中的指定值JS陣列
- mssql sqlserver 從指定字串中獲取數字的方法SQLServer字串
- 【.Net】從字串陣列中尋找數字的元素字串陣列
- jquery如何獲取指定元素在陣列中第一次出現的位置jQuery陣列
- JavaScript獲取元素在陣列中的位置JavaScript陣列
- js如何獲取指定元素的尺寸JS
- 統計陣列中各數字(元素)出現的次數陣列
- js獲取數字陣列中的最大值和最小值程式碼例項JS陣列
- js找出陣列中出現最多的元素和次數JS陣列
- js獲取數字陣列最大值的幾種方式JS陣列
- javascript實現獲取指定數字區間的隨機數JavaScript隨機
- JS 不使用 for forEach 獲取兩陣列中重複的元素JS陣列
- asp.net 實現獲取一個集合陣列中出現次數最多的元素ASP.NET陣列
- js刪除陣列指定索引的元素JS陣列索引
- js如何獲取兩個陣列共有的元素JS陣列
- C#中如何獲取二維陣列的行數和列數?C#陣列
- JS陣列遍歷和獲取陣列最值JS陣列
- 陣列中每個陣列元素出現的次數陣列
- Matlab 統計陣列中各數字(元素)出現的次數Matlab陣列
- 在陣列中尋找和為指定值的兩個數陣列
- 在JS陣列指定位置插入元素JS陣列
- js實現的獲取指定元素的節點封裝程式碼例項JS封裝
- js如何獲取陣列中的最大值JS陣列
- js如何判斷陣列是否含有指定的元素JS陣列
- js獲取指定月份的天數JS
- Java擷取指定區間內的陣列元素並存入新陣列Java陣列
- js 從目標陣列中過濾掉 一個陣列元素,JS陣列
- (陣列)大數相乘,相加陣列
- 獲取陣列第N個元素的方法陣列
- JavaScript 獲取指定區間的數字JavaScript
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- javascript模擬實現in_array()判斷指定元素是否在陣列中JavaScript陣列