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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.