Reputation: 53
I have an array of objects like this example:
[
{ id: 44, message: 'abcd', name: 'example1' },
{ id: 44, message: 'efgh', name: 'example2' },
{ id: 45, message: 'ijkl', name: 'example3' },
{ id: 45, message: 'mnop', name: 'example4' },
]
As you can see the, id value is repeated. Now i need change key name of "name" to "lastName" only at second repeated object:
[
{ id: 44, message: 'abcd', name: 'example1' },
{ id: 44, message: 'efgh', lastName: 'example2' },
{ id: 45, message: 'ijkl', name: 'example3' },
{ id: 45, message: 'mnop', lastName: 'example4' },
]
Upvotes: 0
Views: 83
Reputation: 8125
You can keep last id
track, and modify
the return object in map loop
For unsorted list:
let data = [
{ id: 44, message: "abcd", name: "example1" },
{ id: 44, message: "efgh", name: "example2" },
{ id: 45, message: "ijkl", name: "example3" },
{ id: 45, message: "mnop", name: "example4" },
];
let idMap = new Set();
const result = data.map((item) => {
if (idMap.has(item.id)) {
const { name: lastName, ...rest } = item;
item = { ...rest, lastName };
} else {
idMap.add(item.id);
}
return item;
});
console.log(result);
Note: data has to be sorted based on id.
let data = [
{ id: 44, message: "abcd", name: "example1" },
{ id: 44, message: "efgh", name: "example2" },
{ id: 45, message: "ijkl", name: "example3" },
{ id: 45, message: "mnop", name: "example4" },
];
let lastId = "";
const result = data.map((item) => {
if (lastId === item.id) {
const { name: lastName, ...rest } = item;
item = { ...rest, lastName };
lastId = "";
} else {
lastId = item.id;
}
return item;
});
console.log(result);
Upvotes: 1
Reputation: 28404
You can save the id
s of each item and rename the key from name
to lastName
if the item with this id was already visited.
let list = [
{ id: 44, message: 'abcd', name: 'example1' },
{ id: 44, message: 'efgh', name: 'example2' },
{ id: 45, message: 'ijkl', name: 'example3' },
{ id: 45, message: 'mnop', name: 'example4' },
];
let checked = [];
list.forEach(function (item) {
if(checked.includes(item.id)){
item['lastName'] = item['name'];
delete item['name'];
}else{
checked.push(item.id);
}
});
console.log(list)
Upvotes: 0