Jes*_*ess 1 javascript arrays sorting
我有一个字符串数组:
array = ["Henry","Brian","Henry","Matilda","Henry","Brian","Matthew"]
Run Code Online (Sandbox Code Playgroud)
并且想要将它们排序到一个列表中,该列表首先通过最常出现的项目对数组进行排序,但之后也会删除它们以创建如下所示的列表:
sortedArray = ["Henry","Brian","Matilda","Matthew"]
Run Code Online (Sandbox Code Playgroud)
有没有办法在javascript中执行此操作?
您可以使用此ES6函数,该函数在O(nlogn)中运行,而不是O(n²)作为其他一些解决方案:
var array = ["Henry","Brian","Henry","Matilda","Henry","Brian","Matthew"]
var result = [...array.reduce( (acc, s) => acc.set(s, (acc.get(s) || 0)+1), new Map )]
.sort( (a, b) => b[1] - a[1] )
.map( a => a[0] );
console.log(result);Run Code Online (Sandbox Code Playgroud)
它首先通过保持每个字符串的计数(以线性时间运行)来创建映射.
然后将该映射转换为成对的数组(带扩展[... ]),然后按该计数对其进行排序(O(nlogn)).
最后,使用,从该数组中再次删除计数 .map()
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |