javascript - Javascript - 获取唯一且排序的数组
问题描述
我有一个包含重复项目的数组。我想过滤该数组以仅返回唯一项,但是必须根据它们在初始数组中的次数对这些项进行排序。
const initialArr = [
{
id: 1
},
{
id: 1
},
{
id: 2
},
{
id: 1
},
{
id: 3
},
{
id: 3
},
];
const expectedSortedResult = [
{
id: 1
},
{
id: 3
},
{
id: 2
}
]
解决方案
尝试始终发布您的尝试,无论它离解决方案有多远。
您应该研究以下内容(我也用这些解决了它):
减少(创建对象、groupBy 并创建 __count 属性):https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
将其转换回带有Object.values()
,的数组,然后
排序(按 __count 排序):https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
然后,如果您不希望在输出中使用该计数属性,则需要删除它,您可以使用 Map 执行此操作:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /阵列/地图
const initialArr = [
{id: 1},
{id: 1},
{id: 2},
{id: 1},
{id: 3},
{id: 3},
];
const output = Object.values(initialArr.reduce((aggObj, item) => {
if (aggObj[item.id]){
aggObj[item.id].__count += 1
}
else{
aggObj[item.id] = item;
aggObj[item.id].__count = 1
}
return aggObj;
}, {}))
.sort((a,b) => b.__count - a.__count)
.map(a => {delete a.__count; return a});
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- python - 为什么我的 Tkinter GUI 打开时在视觉上失焦?
- javascript - 在 nodejs 中使用 npm start 的问题。'nodemon' 不是内部或外部命令、可运行程序或批处理文件
- r - 将单元格除以同一列的长度
- javascript - 单击框时在反应搜索框中显示选项
- angular - 使用firebase以角度分离登录表单学生,教师和管理员
- css - 导航栏折叠按钮不显示 bootstrap 4.5.0 和 Nextjs 9.4.4 的项目
- angular - 未应用 Angular *ngFor 键值排序
- php - php artisan migrate = 连接被拒绝 (mac/laravel/xampp)
- google-cloud-platform - BigQuery DWH 的重要概念
- apollo - 如何在 GraphQL 中跨其余数据源维护请求上下文