【发布时间】:2016-12-14 17:00:01
【问题描述】:
我正在尝试解决算法挑战。
提示如下:
将存储在 2D 数组中的库存与新交付的第二个 2D 数组进行比较和更新。更新当前现有的库存项目数量(在 arr1 中)。如果找不到项目,请将新项目和数量添加到库存数组中。返回的库存数组应按项目的字母顺序排列。
这是我的代码:
function updateInventory(arr1, arr2) {
// All inventory must be accounted for or you're fired!
var myMap = new Map();
for (var i = 0; i < arr1.length; i++){
myMap.set(arr1[i][1], arr1[i][0]);
}
for (i = 0; i < arr2.length; i++){
if (!myMap.has(arr2[1])){
myMap.set(arr2[i][1], 0);
}
myMap.set(arr2[i][1], myMap.get(arr2[i][1]) + arr2[i][0]);
}
var arr3 = [];
// sorting
myMap.forEach(function(value, key){
var i = 0;
while (i < arr3.length && key > arr3[i][1])
i++;
arr3.splice(i, 0, [value, key]);
});
return arr3;
}
// 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);
https://jsfiddle.net/5fvgdL84/
这是应该发生的事情:
updateInventory([[21, "保龄球"], [2, "脏袜子"], [1, "发夹"], [5, "麦克风"]], [[2, "发夹" ], [3, "吃掉一半的苹果"], [67, "保龄球"], [7, "牙膏"]])
应该返回
[[88, “保龄球”], [2, “脏袜子”], [3, “发夹”], [3, “吃了一半的苹果”], [5, “麦克风”], [7,“牙膏”]]。
编辑:我想我已经找到了解决方案。但是,代码中似乎有一个我似乎找不到的错误。我需要这方面的帮助。
【问题讨论】:
标签: javascript