[Advanced Algorithm] - Inventory Update

題目

依照一個存着新進貨物的二維數組,更新存着現有庫存(在 arr1 中)的二維數組. 若是貨物已存在則更新數量 . 若是沒有對應貨物則把其加入到數組中,更新最新的數量. 返回當前的庫存數組,且按貨物名稱的字母順序排列.數組

提示

Global Array Object測試

測試用例

  • updateInventory() 應該返回一個數組.
  • updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]]).length 應該返回一個長度爲6的數組.
  • updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]]) 應該返回 [[88, "Bowling Ball"], [2, "Dirty Sock"], [3, "Hair Pin"], [3, "Half-Eaten Apple"], [5, "Microphone"], [7, "Toothpaste"]].
  • updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], []) 應該返回 [[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]].
  • updateInventory([], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]]) 應該返回 [[67, "Bowling Ball"], [2, "Hair Pin"], [3, "Half-Eaten Apple"], [7, "Toothpaste"]].
  • updateInventory([[0, "Bowling Ball"], [0, "Dirty Sock"], [0, "Hair Pin"], [0, "Microphone"]], [[1, "Hair Pin"], [1, "Half-Eaten Apple"], [1, "Bowling Ball"], [1, "Toothpaste"]]) 應該返回 [[1, "Bowling Ball"], [0, "Dirty Sock"], [1, "Hair Pin"], [1, "Half-Eaten Apple"], [0, "Microphone"], [1, "Toothpaste"]].

分析思路

  1. 遍歷進貨數組,取每個元素,而後遍歷庫存數組,若進貨的名稱已存在,直接修改數目,若進貨的名稱不存在,這 push 到庫存中;
  2. 從測試用例中可知:最終的庫存列表須要根據名稱進行排序,從字符的低到高進行排序;

代碼

function updateInventory(arr1, arr2) {
    // All inventory must be accounted for or you're fired!
  
    for (var i = 0; i < arr2.length; i++) {
      for (var j = 0; j < arr1.length; j++) {
        if (arr1[j][1] === arr2[i][1]) {
          arr1[j][0] += arr2[i][0];
          break;
        }
      }
      
      if (j == arr1.length) {
        arr1.push (arr2[i]);
      }
    }
  
    return arr1.sort(function(a, b) {
      return a[1].charCodeAt(0) - b[1].charCodeAt(0);
    });
}

// Example inventory lists
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"]
];

updateInventory(curInv, newInv);
相關文章
相關標籤/搜索