Search code examples
javascriptarraysarrow-functions

How to rename an object property values removing a specific object from the list


I have a list of object

let table = [{id:4,val:"21321"},{id:5,val:"435345"},{id:6,val:"345345"}]

I want to rename the id value after removing an object from the list which has a specific id value(for example id:5)

I am using array filter method

table.filter((element,index)=>{
    if(element.id!==5){
        element.id=index
        return element 
    }else{
       index+1
    }
    return null
})

I am expecting a return value

[{id: 0,val: "21321"},{id: 1,val: "345345"}]

but i am getting this

[{id: 0, val: "21321"},{id: 2, val: "345345"}]

Note: I know i can use filter method to remove the specific object and than use map method to rename the id value but i want a solution where i have to use only one arrow function


Solution

  • You can use array#reduce to update the indexes and remove elements with given id. For the matched id element, simply return the accumulator and for other, add new object with val and updated id.

    const data = [{ id: 4, val: "21321" }, { id: 5, val: "435345" }, { id: 6, val: "345345" }],
          result = data.reduce((res, {id, val}) => {
            if(id === 5) {
              return res;
            }
            res.push({id: res.length + 1, val});
            return res;
          }, []);
    console.log(result)