假设我们有以下对象数组:
const arr = [
{ name: 'John', age: 30, city: 'New York' },
{ city: 'Los Angeles', name: 'Jane', age: 25 },
{ age: 35, city: 'Chicago', name: 'Bob' }
];
如果我们想按name
、age
或city
字段进行排序,我们可以使用Array.sort()
方法,其中我们可以传递一个比较函数来告诉方法如何排序:
arr.sort((a, b) => {
if (a.name < b.name) { return -1; }
if (a.name > b.name) { return 1; }
return 0;
});
这将按name
字段对数组进行排序,并返回以下结果:
[
{ name: 'Bob', age: 35, city: 'Chicago' },
{ name: 'Jane', age: 25, city: 'Los Angeles' },
{ name: 'John', age: 30, city: 'New York' }
]
但是,如果我们不知道要按哪个字段进行排序,我们可以首先获取对象的所有键,然后按每个键进行排序,从而进行多键排序:
arr.sort((a, b) => {
const keys = Object.keys(a);
for (let key of keys) {
if (a[key] < b[key]) { return -1; }
if (a[key] > b[key]) { return 1; }
}
return 0;
});
这将返回以下结果:
[
{ age: 35, city: 'Chicago', name: 'Bob' },
{ city: 'Los Angeles', name: 'Jane', age: 25 },
{ age: 30, city: 'New York', name: 'John' }
]
需要注意的是如果对象中的值是非原始类型,则需要特殊处理。
上一篇:按位置和每周结束日期获取数据组
下一篇:按位置将字符串拆分为单元格数组