vendredi 17 juillet 2020

JavaScript - improve the construction of the dynamic object

I have this script that builds an object:

console.log(solution([2, 1, 3, 5, 3, 2]))


function solution(inputArray) {
  let arrMap = [] 

  for (let i = 0; i < inputArray.length; i++) { 
      var repeated = false;
      var e = arrMap.find(s => s.element == inputArray[i])
      
      if(e){        
        repeated = true;
        e.repeated = true;      
        e.firstPosition = e.position
        e.lastPosition = i           
        delete e['position'];
      }
      
      arrMap.push({
        element : inputArray[i],
        position: i,       
        repeated: repeated
      })
    } 

  return arrMap
}

This is the object that the script builds:

[
  { element: 2, repeated: true, firstPosition: 0, lastPosition: 5 },
  { element: 1, position: 1, repeated: false },
  { element: 3, repeated: true, firstPosition: 2, lastPosition: 4 },
  { element: 5, position: 3, repeated: false },
  { element: 3, position: 4, repeated: true },
  { element: 2, position: 5, repeated: true }
]

I simply want to make a change to the return by deleting the remaining lines of the items that are repeated, in this case, items 2 and 3. As shown below:

[
   { element: 2, repeated: true, firstPosition: 0, lastPosition: 5 },
   { element: 1, position: 1, repeated: false },
   { element: 3, repeated: true, firstPosition: 2, lastPosition: 4 },
   { element: 5, position: 3, repeated: false },
   { element: 3, position: 4, repeated: true }, //<---- DUPLICATED! DELETE THIS LINE
   { element: 2, position: 5, repeated: true } //<---- DUPLICATED! DELETE THIS LINE
]

The result should be as shown below:

 [
   { element: 2, repeated: true, firstPosition: 0, lastPosition: 5 },
   { element: 1, position: 1, repeated: false },
   { element: 3, repeated: true, firstPosition: 2, lastPosition: 4 },
   { element: 5, position: 3, repeated: false },     
 ]

Aucun commentaire:

Enregistrer un commentaire