Hii here is my simple logical question
this is my reference array
referenceArray =[{name : "animal" , source :['duck', 'cat'], target:['water', 'ground']},
{name : "car" , source :['tata', 'kia'], target:['tiago', 'sector']},
{name : "bike" , source :['honda', 'hero'], target:['livo', 'xtream']}
]
this is i want to modify the source and target array with the above referenceArray array
originalArray =[{source : 'water' , target : 'hero'},
{source : 'tata' , target : 'ground'},
{source : 'livo' , target : 'kia'},
]
but i want the final output like this
originalArray =[{source : 'animal' , target : 'bike'},
{source : 'car' , target : 'animal'},
{source : 'bike' , target : 'car'},
]
can anyone help me out please that is soo appreciatable
CodePudding user response:
You can simply build a Map of the reference array with each source and target elements keyed against the name, then map over the originalArray accessing the Map. Keep in mind this does nothing to avoid possible overlap of source and target arrays.
const referenceArray = [{ name: "animal", source: ['duck', 'cat'], target: ['water', 'ground'] }, { name: "car", source: ['tata', 'kia'], target: ['tiago', 'sector'] }, { name: "bike", source: ['honda', 'hero'], target: ['livo', 'xtream'] }];
const originalArray = [{ source: 'water', target: 'hero' }, { source: 'tata', target: 'ground' }, { source: 'livo', target: 'kia' },]
const referenceMap = new Map()
for (const { name, source, target } of referenceArray) {
for (const k of [...source, ...target]) {
referenceMap.set(k, name);
}
}
const result = originalArray.map(({ source, target }) => (
{
source: referenceMap.get(source),
target: referenceMap.get(target)
}
));
console.log(result)
