0

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' }, ] 
4
  • what u have tried ?? Commented Apr 27, 2020 at 19:06
  • Welcome to Stackoverflow. What have you tried so far to solve this issue? Where did you get stuck? Commented Apr 27, 2020 at 19:06
  • I think this has already been answered here Commented Apr 27, 2020 at 19:13
  • Tranks, i stored on a variable the key name, but i got stuck when i search the object that id is repeated. Commented Apr 27, 2020 at 19:14

2 Answers 2

1

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);

Sign up to request clarification or add additional context in comments.

Comments

0

You can save the ids 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)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.