Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Sort Array by Element Frequency solution in Clear category for Sort Array by Element Frequency by Atadolfo
import assert from "assert";
interface obj {
value: any;
count: number;
order: number;
}
var frequencySort = (items: any[]): any[] =>
items.reduce((r: obj[], v: any, i: number) => {r[items.indexOf(v)] = {value: v, count: (r[items.indexOf(v)] ? r[items.indexOf(v)].count : 0) + 1, order: items.indexOf(v)}; return r}, [])
.sort((a: obj, b: obj) => (b.count - a.count)||(a.order - b.order))
.reduce((r: any[], o: obj) => o ? r.concat((new Array(o.count)).fill(o.value)) : r, []);
console.log('Example:');
console.log(frequencySort([4, 6, 2, 2, 6, 4, 4, 4]));
// These "asserts" are used for self-checking and not for an auto-testing
assert.deepEqual(frequencySort([4, 6, 2, 2, 6, 4, 4, 4]), [4, 4, 4, 4, 6, 6, 2, 2], "1º");
assert.deepEqual(frequencySort(['bob', 'bob', 'carl', 'alex', 'bob']), ['bob', 'bob', 'bob', 'carl', 'alex'], "2º");
assert.deepEqual(frequencySort([17, 99, 42]), [17, 99, 42], "3º");
assert.deepEqual(frequencySort([]), [], "4º");
assert.deepEqual(frequencySort([1]), [1], "5º");
console.log("Coding complete? Click 'Check' to earn cool rewards!");
April 26, 2020
Comments: