让对象按指定顺序排序
2022/11/21
共 299 字
约 1 分钟
归档: 技术
离谱的代码背后的离谱需求。
有这样一个对象数组,通过比较它们的某个属性的值来排序,并不是什么难事,如果比较函数返回正数,a 将被排在 b 之后;如果返回负数,a 将被排在 b 之前。如果返回 0,a 和 b 的顺序不变这样,items 数组就会按照 name 属性的倒序排序:
const items = [{name: 'apple', price:7},{name: 'peach', price:10}];
items.sort((a, b) => {
if (a.name < b.name) return 1;
if (a.name > b.name) return -1;
// 如果名称相同,则按照原始顺序排序
return 0;
})
注:sort() 方法返回对原始数组的引用,因此更改返回的数组将同时更改原始数组。
在实际应用中,有可能是按某种指定的顺序排序,无法简单地用某个属性排序。最正确的办法是,给每项添加个 index 这样的属性,通过修改这个属性,达到自定义排序的目的。而对于简单数组,还有一个办法:
var objs = ["grapes", "apple", "pear", "peach", "watermelon"];
objs.sort((star, next) => {
var order = ["apple", "pear", "peach", "watermelon", "grapes"];
return order.indexOf(star) - order.indexOf(next);
})
留言