I have an array like this [1,1,1,1,2,2,2,3,3]
and I want to convert this into [1,2,3,1,2,3,1,1]
using jQuery. I have no code and no idea how can I do this.
Asked
Active
Viewed 2,328 times
2

worpet
- 3,788
- 2
- 31
- 53

Soft One Global
- 165
- 7
-
Have you done any research into Array sort? – evolutionxbox Oct 10 '17 at 08:36
1 Answers
29
You could use sorting with map by using a temporary object with a hashtable for the same group array. Take from it the length of the used array as group for sorting.
The sorting happens with the group and index.
The result is mapped with index of the sorted temporary array.
var array = [1, 1, 1, 1, 2, 2, 2, 3, 3],
groups = Object.create(null),
result = array
.map((value, index) => ({ index, group: groups[value] = (groups[value] || 0) + 1 }))
.sort((a, b) => a.group - b.group || a.index - b.index)
.map(({ index }) => array[index]);
console.log(...result);

Nina Scholz
- 376,160
- 25
- 347
- 392