arrays - 按属性排序数组而不使用第一个对象
问题描述
我有一个对象数组,我想按对象 ID 对它们进行排序。我尝试使用
options.sort((a, b) => a.id.localeCompare(b.id));
但没有按预期工作,因为它甚至对“所有”对象进行排序,我不想要这个(id = 'all'的对象应该是我数组中的第一个,之后应该是升序的对象命令)。下面你可以看到我的代码的输入和输出
输入:
var items =
[{ 'Name':'All', 'id': 'all'
{ 'Name':'item1', 'id': '003' }
{ 'Name':'item2', 'id': '001' }
{ 'Name':'item3', 'id': '002' }];
输出:
var items =
[{ 'Name':'item2', 'id': '001' }
{ 'Name':'item3', 'id': '002' }
{ 'Name':'item1', 'id': '003' }
{ 'Name':'All', 'id': 'all'}];
解决方案
function compare(key, order = 'desc') {
return (a, b) => {
if (a[key] > b[key])
return order === 'desc' ? -1 : 1;
if (a[key] < b[key])
return order === 'desc' ? 1 : -1;
return 0;
};
}
const data = [
{ 'Name':'All', 'id': 'all'},
{ 'Name':'item3', 'id': '003' },
{ 'Name':'item1', 'id': '001' },
{ 'Name':'item2', 'id': '002' }
];
const sortedData = data.sort(compare('Name', 'asce'));
console.log('sorted: ', sortedData);
推荐阅读
- javascript - 在另一个 Promise 包裹的流中等待 Promise
- unity3d - UI 元素在 Android 上无法正确呈现
- javascript - Ruby on rails 不加载 Javascript
- machine-learning - 我已经完成了一个分类问题,我得到了 99.9% 的准确率,但准确率、召回率、f1 为 0
- asp.net - FileSystemWatcher 不会在 Azure 中触发
- java - 如何使用 Junit 5 使用 Testcontainer 对 Kafka 运行集成测试
- angular - 如何将 PrimeNg 表格行设置为文档的 activeElement
- http - URL长度的上限?
- google-apps-script - 编辑特定范围时如何运行函数
- regex - 正则表达式仅允许且仅允许数字