JS将数组排序为三个出现

JS Sort an array into three occurrences

我需要排列数组,使三个只剩下或更少的实例,例如

let tab = [ 3, 3, 4, 4, 5, 4, 5, 6, 6, 4, 6, 3, 7, 7, 3]

一开始我想得到这样的东西;

let newTab = [3,3,3,4,4,4,5,5,6,6,6,7,7]

我正在寻求帮助,因为我已经不知道了。

let tab = [ 3, 3, 4, 4, 5, 4, 5, 6, 6, 4, 6, 3, 7, 7, 3]
let newTab = tab.sort()
console.log(newTab)

您可以按值对数据进行分组,每组只取三个项目的最大长度。

结果取平面数组中的值。

const
    tab = [3, 3, 4, 4, 5, 4, 5, 6, 6, 4, 6, 3, 7, 7, 3],
    result = Object
        .values(tab.reduce((r, v) => {
            r[v] ??= [];
            if (r[v].length < 3) r[v].push(v);
            return r;
        }, {}))
        .flat();

console.log(...result);

您可以 reduce() to an intermediate count object, and then flatMap() 正确大小的数组:

const tab = [ 3, 3, 4, 4, 5, 4, 5, 6, 6, 4, 6, 3, 7, 7, 3];

const result = Object.entries(
  tab.reduce((a, v) => ({...a, [v]: (a[v] || 0) + 1}), {})
).flatMap(([v, count]) => new Array(Math.min(count, 3)).fill(+v));

console.log(result);

排序是通过默认对整数对象键进行数字排序来实现的。