我正在尝试通过对象值对对象数组进行排序。但是,我需要数组中符合特定条件的某些项目排在第一位,而其他符合不同条件的项目则排在最后。否则,应按标题排序。这是我的意思的示例:
let arr = [
{ flag: true, title: 'Orange', dateAdded: 'Some Date' },
{ flag: true, title: 'Apple', dateAdded: 'Some Date' },
{ flag: false, title: 'Peach', dateAdded: 'Some Date' },
{ flag: true, title: 'Plum', dateAdded: 'Some Date' },
{ flag: true, title: 'Mango', dateAdded: 'Some Date' },
{ flag: true, title: 'Banana', dateAdded: 'Some Date' },
{ flag: false, title: 'Tangerine', dateAdded: 'Some Date' }
];
以下是标准:
(我将使用时刻作为日期。)
所以我知道如何对对象数组进行排序,但是我又如何添加这三个条件?
arr.sort((a, b) => {
if (a.title > b.title) return 1;
if (a.title < b.title) return -1;
return 0;
});
答案 0 :(得分:1)
sort
函数可在2个项目之间工作,因此只需编写比较2个项目的代码,您就可以在这2个项目之间定义应该赢取哪个项目。
arr.sort((a, b) => {
if (a.withinAWeek()) {
if (b.withinAWeek()) {
return (a.date < b.date) ? -1 : 1;
} else {
return -1;
}
}
if (a.flag) {
if (b.flag) {
return (a.date < b.date) ? -1 : 1;
} else {
return 1;
}
}
if (a.title > b.title) return 1;
if (a.title < b.title) return -1;
return 0;
});
那是伪代码,但是这个想法应该可行,并且在阅读时非常容易理解。
答案 1 :(得分:0)
听起来您可以通过几个更简单的步骤解决此问题:
通过遍历数组并检查是否:从数据中创建三个数组,第一个,中间,最后一个 一种。日期不到一周,请先添加 b。标志为假,添加到最后 C。以上都不是,请添加到中间
根据每个展示位置的指定条件对这些数组进行排序
首先返回.concat(mid.concat(last))