Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
211 views
Welcome To Ask or Share your Answers For Others

1 Answer

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);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...