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);
排序是通过默认对整数对象键进行数字排序来实现的。
我需要排列数组,使三个只剩下或更少的实例,例如
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);
排序是通过默认对整数对象键进行数字排序来实现的。