This should work on what you need.
Object.defineProperty (Array.prototype, 'getUniqueSorted', { enumerable: false, value: function () { var uniqarr = []; for (var i in this) { var index = uniqarr.indexOf (this.[i]); if (index == -1) { uniqarr.push (this [i]) } else { uniqarr [index].count = uniqarr.count ? 2 : uniqarr.count+1; } } uniqarr = uniqarr.sort(function(a, b){ return (a.count | 1) - (b.count | 1) }); return uniqarr; } });
There are other options to make it more elegant.
Object.defineProperty (Array.prototype, 'removeDuplicated', { enumerable: false, value: function () { var uniqarr = []; this.reduce(function(accum, current) { if (accum.indexOf(current) < 0) { accum.push(current); } return accum; }, uniqarr); return uniqarr.sort(function(a, b){ return a.count - b.count }); } });
source share