[英]Replace values of an array of objects from another array of objects in JavaScript
所以我有这个主数组:
const purchaseData = [
{
product_id: "product_id_1",
localized_title: "Product Title 1",
... other attributes
},
{
product_id: "product_id_2",
localized_title: "Product Title 2",
... other attributes
},
我想用一个数组替换 localized_title ,该数组包含某些 product_ids 的一些更新的 localized_title
例子:
updatedData = [
{
product_id: "product_id_1",
localized_title: "Updated Product Title 1",
...other random attributes // different from the attributes in the objects of purchaseData
},
];
在这种情况下,purchaseData 的第一个孩子应该只更新其 localized_title。 有没有一种优雅的方法可以在不使用 For...lopps 并且不改变数据的情况下做到这一点? 我尝试了很多方法,但我似乎写了太多行代码(不是很干净)。
这是我尝试过的:
const updatedData = purchaseData.map(obj => {
const foundObject = originalProducts.find(
o => o.product_id === obj.product_id,
);
const localized_title = foundObject && foundObject.localized_title
if (localized_title) {
return {...obj, localized_title}
}
return obj;
});
我会使用 Map 来简化检索对象(这也使代码 O(n)):
const productById = new Map(products.map(it => ([it.product_id, it])));
const updated = purchases.map(purchase => {
const product = productById.get(purchase.product_id);
if (product && product.localized_title) {
return { ...purchase, localized_title: product.localized_title, };
}
return purchase;
});
使用Map
优化查找以将foundObject
的搜索从 O(n) 减少到 O(1) 是值得的,并且您可以将它们合并为一个,而不是使用两个return
语句:
const originalProductsMap = new Map(
originalProducts.map(o => [o.product_id, o])
);
const updatedData = purchaseData.map(oldData => {
const newData = originalProductsMap.get(oldData.product_id);
const localized_title = newData && newData.localized_title;
return localized_title
? { ...oldData, localized_title }
: oldData;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.