【发布时间】:2020-08-31 14:28:06
【问题描述】:
我正在尝试通过首先创建对象来将“新货”数组与当前库存数组合并,以使数据更易于管理。因此,任何相同的项目都会添加到库存中的任何现有项目中。
.sort 运行但 flat 似乎没有做任何事情。我怀疑存在一些与我如何制作数组和弄乱索引有关的问题?
function updateInventory(arr1, arr2) {
let invObj = {}
let updateObj = {}
let result = []
arr1.forEach( x => invObj[x[1]] = x[0])
arr2.forEach( x => updateObj[x[1]] = x[0])
for(let key in updateObj) {
if (invObj[key]) {
invObj[key] += updateObj[key]
} else {
invObj[key] = updateObj[key]
}
}
result = Object.keys(invObj).map(key=>[invObj[key],key])
.sort((a,b)=>{
// attempting to sort inventory alphabetically here as required by my course's test
return a[1] - b[1]
})
return result
}
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"]
];
console.log(updateInventory(curInv, newInv));
【问题讨论】:
-
如果您尝试对字符串进行排序,使用减法是不合适的。您应该使用字符串中的
localeCompare方法。 -
另外,我是否建议您在构建最终结果之前对键进行排序。可以让你的代码更简洁
-
正如其他人所写,使用
localCompare来比较字符串。你的排序测试应该是return a[1].localeCompare(b[1]);
标签: javascript sorting merge