Javascript演算法練習(八)

2021-07-16 18:36:34 字數 3045 閱讀 5084

/**

* 11. 用第二個陣列的資料去更新第乙個陣列資料(更新庫存)

* @param oldarr 原始資料

* @param newarr 新資料

* @return 返回更新後的老資料陣列並且根據名稱排序後的二維陣列

* * ps: 1. 兩個陣列都是二維陣列

* 2. 兩個陣列的內容要一致即元素的第乙個元素為數量,第二個元素為名稱,

* 比如:oldarr = [[22, "hello"]], newarr = [[33, "hello"]]; 更新後就是:[[55, "hello"]]

*/arrayhandler.prototype.updateinventory = function

(oldarr, newarr)

if (ua > ub)

if (ua == ub)

};if (oldarr.length === 0) return newarr.sort(compare);

if (newarr.length === 0) return oldarr.sort(compare);

var findflag = 0; // 找到存在的庫存標識

newarr.map(function

(newvalue)

});// 到這裡表示沒有庫存,直接新增

if (!findflag)

// 復位庫存標識

findflag = 0;

});// 排序

oldarr.sort(compare);

return oldarr;

}

/**

* 9. 模擬收銀抽屜,給出購買的物品**及所付金額,算出找零

* @param price 商品**

* @param cash 所付金額

* @param cid 剩餘金額的二維陣列

* @return 返回需要找零的金額的二維陣列,裡面包含了找零對應的面值

* * 最後乙個引數cid,即面值剩餘金額陣列,必須要和國家錢幣對應的面值金額相一致,且順序從小到大排

* 例如:[

* // 對應1美分(cent)、5美分(nickel)、10美分(dime,一角)、25美分(quarter)、

* // 1美元(one)、5美元(five)、10美元(ten)、20美元(twenty)、100美元(one hundred)

* ["penny", 1.01], ["nickel", 2.05], ["dime", 3.10], ["quarter", 4.25],

* ["one", 90.00], ["five", 55.00], ["ten", 20.00], ["twenty", 60.00], ["one hundred", 100.00]

* ]

* * todo:最後可以將dollar陣列,當成引數傳進去,與cid陣列的內容順序要一致,分別表示錢幣金額面值數,

* 根據基數base和國家錢幣面值不同,陣列會不相同

*/numberhandler.prototype.checkcashregister = function

(price, cash, cid) );

return totalmoney;

}// 餘額不足,沒法找了

var remain = gettotalmoney(cid);

if (remain == change) else

if (remain < change)

// 分別對應,1美分-5美分-1角-25美分-1美元-5美元-10美元-20美元-100美元

// 這裡還可以進行優化,讓dollar成為引數,而動態獲取相應國家的金額面值

// 比如代表中國的:[10, 50, 100, 500, 1000, 2000, 5000, 10000] ->

// 對應:1角-5角-1元-5元-10元-20元-50元-100元(以元為單位的基礎上乘以面值基數:base這裡為100)

var dollar = [1, 5, 10, 25, 100, 500, 1000, 2000, 10000]; // todo

var pay = {}; // 儲存的key:dollar中面值索引,value:要找的此面值的個數

var currlast = 0; // 當前面值所剩餘額

var currmoney = 0; // 當前金錢面額(dollar中對應的值)

for (var i = dollar.length - 1; i >= 0; i--)

// 當前金額面值

currmoney = dollar[i];

// 達到找零的面值必須滿足兩個條件:

// 1. 找零必須大於當前面值

// 2. 剩餘的當前面值的錢足夠的情況下

if (change > currmoney) else }}

var res = ;

// 組織最後需要找零的錢

var keys = object.keys(pay);

var idx = 0;

for (var j = 0; j < keys.length; j++)

// 找到最後,所有能找的面值加起來還不夠

// 這裡與最開始不同,這裡是過濾掉了所有找不開的面值

// 比如:要找0.05元,但是目前剩餘一張0.01和1元的面值,依舊判定為找不開

// 而最開始的是所有餘額加起來都不夠找

if (gettotalmoney(res) < change)

return res;

}

最近有點鬆懈了,加上組裡現在整個模組的業務都讓我乙個人搞,老大跑去做維護新系統去了,所以最近也很忙(藉口總是很多,呸………..!!!),還是要加緊學習,打好基礎,不能鬆懈了。今天整了這三個練習,記錄下,還算有點收穫吧。給自己打打氣,加油吧!!!

JavaScript回文演算法練習

function palindrome str var ss s.join if ss str return str palindrome 0 0 123 0 0 輸出0012300分享一下半成功的回文演算法案例。剛在h3cschool玩js的時候,發現乙個挺有意思的事情,就是正規表示式真的好奇怪。...

JavaScript陣列練習

找出元素 item 在給定陣列 arr 中的位置 function indexof arr,item return 1 計算給定陣列 arr 中所有元素的總和 function sum arr return sum 移除陣列 arr 中的所有值與 item 相等的元素。不要直接修改陣列 arr,結果...

八 JavaScript 表單驗證

body script 表單驗證 functionvalidateform e mail驗證 輸入的資料必須包含 符號和點號 同時,不可以是郵件位址的首字元,並且 之後需有至少乙個點號 functionvalidateemailform script formname myform action d...