Search code examples
javascriptarraysecmascript-6ecmascript-5

Move an element to the front of an array: Javascript


I have an array of objects with this format

let arr = [ { name: "test1", id: 5}, { name: "test2", id: 6 } , { name: "test3", id: 8 } ]

Now I basically want to move the item with 6 to the front of the array by re-arranging so that result becomes

let result = [ { name: "test2", id: 6 } , { name: "test1", id: 5}, { name: "test3", id: 8 } ]

What I have tried

   const found = arr.find((element) => {
        return element.id === 6;
   });
   if (found) {
        const [...arr, found] = arr;
        return found;
      } else {
        return arr;
   }

Solution

  • You can make use of Array.unshift and Array.splice.

    let arr = [{name:"test1",id:5},{name:"test2",id:6},{name:"test3",id:8}]
    
    const moveToFront = (data, matchingId) => {
      //find the index of the element in the array
      const index = data.findIndex(({id}) => id === matchingId);
      if(index !== -1) {
        //if the matching element is found, 
        const updatedData = [...data];
        //then remove that element and use `unshift`
        updatedData.unshift(...updatedData.splice(index, 1));
        return updatedData;
      }
      //if the matching element is not found, then return the same array
      return data;
    }
    
    console.log(moveToFront(arr, 6));
    .as-console-wrapper {
      max-height: 100% !important;
    }