下面的代码应该是:
1)遍历两个数组,
2) 如果两个数组中都存在某个项目,则将其值添加到第一个数组中相似项目的值中,
3) 如果在 arr2 中找到该项目但在 arr1 中未找到该项目,则将该项目添加到 arr1 中。当两个数组具有相同大小时,我的代码可以按预期工作,但这是我使用不同大小的数组得到的结果。
结果:
[[42, "Bowling Ball"], [4, "Dirty Sock"], [2, "cat"], [6, "mugs"], [2, "Dirty Sock"], [3, "rags"]]
应该是:
[[42, "Bowling Ball"], [4, "Dirty Sock"], [2, "cat"], [3, "rags"], [3, "mugs"]]
这是我的代码:
function updateInventory(arr1, arr2) {
for (var i = 0; i < arr1.length; i++) {
for (var j = i; j < arr2.length; j++) {
if (arr1[i][1] === arr2[j][1]) {
arr1[i][0] += arr2[j][0];
}
if (arr1[i].indexOf(arr2[j][1]) === -1) {
arr1.push(arr2[j]);
}
if (arr2.length > arr1.length) {
arr1.push(arr2[arr2.length -1]);
}
else
break;
}
}
return arr1;
}
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[2, "cat"],
];
var newInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[3, "rags"],
[3, "mugs"]
];
updateInventory(curInv, newInv);
这里有什么问题?
最佳答案
您可以使用 list 的哈希表并检查和更新 currInv
。
var curInv = [[21, "Bowling Ball"], [2, "Dirty Sock"], [2, "cat"], ],
newInv = [[21, "Bowling Ball"], [2, "Dirty Sock"], [3, "rags"], [3, "mugs"]],
inventory = Object.create(null);
curInv.forEach(function (a) {
this[a[1]] = a;
}, inventory);
newInv.forEach(function (a) {
if (!this[a[1]]) {
this[a[1]] = [0, a[1]];
curInv.push(this[a[1]]);
}
this[a[1]][0] += a[0];
}, inventory);
console.log(curInv);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 比较项目并将其添加到对象数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40184870/