2017-10-10 273 views

回答

12

您可以使用sorting with map通过使用具有相同组数组的哈希表的临时对象。从中取出用于排序的组的长度。

排序发生在组和索引中。

结果映射到已排序的临时数组的索引。

var array = [1, 1, 1, 1, 2, 2, 2, 3, 3], 
 
    groups = Object.create(null), 
 
    result = array 
 
     .map(function (a, i) { 
 
      return { index: i, group: (groups[a] = groups[a] || []).push(a) }; 
 
     }) 
 
     .sort(function (a, b) { 
 
      return a.group - b.group || a.index - b.index; 
 
     }) 
 
     .map(function (o) { 
 
      return array[o.index]; 
 
     }); 
 

 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }