誰可以在簡單的英語中好心解釋累加器acc的構造?Javascript減少累加器解釋
return arr1.reduce(function(acc, curr){
var last = acc[acc.length-1];
if(acc.length > 0 && curr[1]===last[1]) {
last[0] += curr[0];
}
else acc.push(curr);
return acc;
}, []);
}
這減少方法可以用來解決FreeCodeCamp「庫存更新」任務,作爲其先進的算法腳本課的一部分。
鏈接:https://www.freecodecamp.org/challenges/inventory-update。 需要更新庫存數組(arr1)中的現有項目,並使用「新交貨」數組中的新項目進行更新。
兩個測試陣列,當前庫存curInv和新的交付分別newInv,可能如下:
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];
var newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
發現JavaScript的一些優秀的文章減少方法(例如this post和一個偉大的後視頻課程on egghead.io),並以某種方式感應它的功耗,我會讀取方法如下:
「通過創建一個空數組[] f來減少庫存數組irst(初始值),然後應用以下回調函數:
如果庫存數組當前不是空的(長度大於零),並且當前處理的項目的名稱(curr的索引0可能爲「Bowling Ball 「例如)與正在更新的庫存數組的最後一項相同,然後更新庫存數組中的該物料的數量。
最後一項定義在if語句正上方,如下所示:取當前累計數組的長度,減去1,並使用此值爲累積數組編制索引。然後將該索引處的元素分配給變量'last'。另一方面,如果庫存爲空,則完全添加新項目,即:項目名稱和金額。 現在返回新積累陣「
如何使用長度 - ?累加器,使ACC實際上積累有用的1 (原諒押韻)
我想我明白大部分如何這種減少方法建立,但請大家指正無論我誤讀),除了這個特殊的 使用acc.length-1。
乾杯,K。
這個減速機是如何解決這個問題的?你能分享實際的電話嗎? – thedude
@thedude:一種解決方案似乎是將reduce方法與concat結合起來,並按字母順序排序,如[Repl.it link](https://repl.it/KKgZ/0) –