Javascript 将一个数组的数据替换为另一个数组的数据
我有一个数组Javascript 将一个数组的数据替换为另一个数组的数据,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有一个数组 const data = [ { id: 0, identifier: 'free-2020', name: '<I18nText id="pricing.plans.name.free" />', planTitle: 'free', price: '00', freeSearches: '<I18nText id="pricing.plans.
const data = [
{
id: 0,
identifier: 'free-2020',
name: '<I18nText id="pricing.plans.name.free" />',
planTitle: 'free',
price: '00',
freeSearches: '<I18nText id="pricing.plans.features.unlimited" />',
freeBookings: '<I18nText id="pricing.plans.features.unlimited" />',
travelerProfiles: '<I18nText id="pricing.plans.features.unlimited" />',
supportTickets: '<I18nText id="pricing.plans.features.available" />',
supportByPhone: ' - ',
supplierChannels: ' - ',
customDomain: ' - ',
active: true,
},
{
id: 1,
identifier: 'basic-2020',
name: '<I18nText id="pricing.plans.name.basic" />',
planTitle: 'basic',
price: '29',
freeSearches: '<I18nText id="pricing.plans.features.unlimited" />',
freeBookings: '<I18nText id="pricing.plans.features.unlimited" />',
travelerProfiles: '<I18nText id="pricing.plans.features.unlimited" />',
supportTickets: '<I18nText id="pricing.plans.features.available" />',
supportByPhone: ' - ',
supplierChannels: ' 1 ',
customDomain: ' - ',
active: false,
},
{
id: 2,
identifier: 'standard-2020',
name: '<I18nText id="pricing.plans.name.standard" />',
planTitle: 'standard',
price: '59',
freeSearches: '<I18nText id="pricing.plans.features.unlimited" />',
freeBookings: '<I18nText id="pricing.plans.features.unlimited" />',
travelerProfiles: '<I18nText id="pricing.plans.features.unlimited" />',
supportTickets: '<I18nText id="pricing.plans.features.available" />',
supportByPhone: ' 1hr/mo ',
supplierChannels: ' 2 ',
customDomain: ' - ',
active: false,
},
{
id: 3,
identifier: 'professional-2020',
name: '<I18nText id="pricing.plans.name.professional" />',
planTitle: 'professional',
price: '99',
freeSearches: '<I18nText id="pricing.plans.features.unlimited" />',
freeBookings: '<I18nText id="pricing.plans.features.unlimited" />',
travelerProfiles: '<I18nText id="pricing.plans.features.unlimited" />',
supportTickets: '<I18nText id="pricing.plans.features.available" />',
supportByPhone: ' 3hr/mo ',
supplierChannels: ' 5 ',
customDomain: 'Yes',
active: false,
},
{
id: 4,
identifier: 'custom-2020',
name: '<I18nText id="pricing.plans.name.custom" />',
planTitle: 'custom',
price: ' - ',
freeSearches: '<I18nText id="pricing.plans.features.unlimited" />',
freeBookings: '<I18nText id="pricing.plans.features.unlimited" />',
travelerProfiles: '<I18nText id="pricing.plans.features.unlimited" />',
supportTickets: '<I18nText id="pricing.plans.features.available" />',
supportByPhone: '<I18nText id="pricing.plans.features.unlimited" />',
supplierChannels: '<I18nText id="pricing.plans.features.unlimited" />',
customDomain: '<I18nText id="pricing.plans.features.available" />',
active: false,
},
];
现在我想通过匹配标识符
键,将计划
数组中的数据放到数据
数组中。因此,数据
数组的id
、标识符
、名称
、价格
数据将替换为计划
数组的这些键的值。似乎我需要将这些数据从两个数组映射到另一个数组?也许不是。如何实现这些功能。需要代码示例。constplansbyid={};
计划。forEach((计划)=>{
plansById[计划标识符]=计划;
});
data.forEach((行)=>{
line.plan=plansbyd[line.plantile];
//如果planTitle丢失或错误,您可能应该添加一些空检查
});
编辑:Array.prototype.find
在IE中不受支持。下面是一个带有筛选器的解决方案:
data = data.map(d => {
const correspondingPlan = plans.filter(plan => d.identifier === plan.identifier)[0];
if (correspondingPlan) {
return {...d, ...correspondingPlan};
} else {
return d
}
})
您可以
reduce
生成预期结果
data.reduce((acc, curr) => {
const found = plans.find(p => p.identifier === curr.identifier)
if(found) {
return [...acc, {...curr, ...found}];
} else {
return [...acc, { ...curr }]
}
return acc;
}, [])
这回答了你的问题吗?你的输出是什么want@SourabhSomani我想用
计划
数组中的一些数据替换数据
数组中的一些数据。在IE中不支持array.find(),请您提及IE中支持的另一种方式,如array.filter()工作版本const planData=data.map(d=>{const correspondingPlan=plans.filter(plan=>d.identifier===plan.identifier,)[0];if(correspondingPlan){return{…d,…correspondingPlan};}else{return d;};
@ashfakrafi我已经用filter
用你的解决方案更新了我的答案
data = data.map(d => {
const correspondingPlan = plans.filter(plan => d.identifier === plan.identifier)[0];
if (correspondingPlan) {
return {...d, ...correspondingPlan};
} else {
return d
}
})
data.reduce((acc, curr) => {
const found = plans.find(p => p.identifier === curr.identifier)
if(found) {
return [...acc, {...curr, ...found}];
} else {
return [...acc, { ...curr }]
}
return acc;
}, [])