一、项目的具体要求见:
https://learn.freecodecamp.one/coding-interview-prep/algorithms/inventory-update/
二、代码详情
JS
function updateInventory(arr1, arr2) {
arr2.forEach((newItem,newIndex) => {
arr1.forEach((curItem,curIndex) => {
if (newItem[1] === curItem[1]) {
curItem[0] += newItem[0]
arr2.splice(newIndex, 1)
}
})
})
return arr1.concat(arr2).sort(function(a,b) {
if (a[1] > b[1]) {
return 1;
} else if (a[1] < b[1]) {
return -1;
} else {
return 0
}
})
}
// 两个货物列表示例
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);
//[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]
三、收获
- array.forEach() 函数的使用,可以简洁大量代码。与 array.map() 函数的区别是,map函数不会改变原数组,而forEach函数会替代原数组;https://www.w3school.com.cn/jsref/jsref_sort.asp
- array.prototype.sort() 函数,字符串按首字母排序复杂点,数字则可以简洁点;其中sort函数若是return a - b,指从小到大排序,即a - b 返回 -1,是默认的排序方式;反之则从大到小排序。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
四、感想
做这一题真的做了很久,有时候容易钻牛角尖,结果一直做不出来,也找不出来问题,这样很容易半天就浪费了。以后做题要给自己一个时间限制,当自己真做不出来的时候,就带着疑问去看人家是怎么解决的,多参考多学习别人的思路,不断改进。
*代码尚存在很多不足,望提出不同的意见,互相交流。*