很抱歉没有在标题中加入特定的排序,但我无法正确说出来。
我正在排序一个文件对象列表,其中包含名称,上传日期和类别等详细信息,我需要对其进行排序,使上次上传的文件推送到顶部,其余文件都是'排序。
例如,如果我按最低顺序将列表从最旧到最新排序,我仍然希望最新的列表位于顶部。
从数据库返回时,列表已按类别,日期等排序,因此我只需要进一步对其进行排序。
必须在传递给sort()的函数中完成。
答案 0 :(得分:1)
有很多解决方案。作为最简单的解决方案,您可以使用https://lodash.com/docs/4.17.4#orderBy
之类的内容答案 1 :(得分:0)
您只需复合排序算法即可实现此目的:
sortingLabels = ["date uploaded", "category", "date"]
myArray.sort((a,b) => {
for (l of sortingLabels) {
const comparison = compare(a,b,l)
if (comparison == 0) {continue}
return comparison
}
})
现在,您所要做的就是实现compare(a,b,label)
函数,该函数根据-1
返回1
,0
或label
。
注意: for循环for-of
适用于ES2015 +,它是最现代的浏览器和Node.js.但是,如果您需要支持显着较旧的浏览器,则可能需要考虑使用常规for-loop
答案 2 :(得分:0)
from_product
不一定稳定,只要你在第一个结果中按一个属性排序。
您需要另一个值才能将相等(生成id
)个项目移到正确的位置,此处的附加值为var data = [{ id: 0, date: '2017-01-01' }, { id: 2, date: '2017-01-01' }, { id: 5, date: '2017-01-02' }, { id: 6, date: '2017-01-05' }, { id: 9, date: '2017-01-06' }, { id: 19, date: '2017-01-11' }, { id: 24, date: '2017-02-01' }, { id: 67, date: '2017-02-01' }, { id: 80, date: '2017-02-11' }, { id: 90, date: '2017-02-21' }, { id: 101, date: '2017-02-23' }, { id: 149, date: '2017-02-28' }, { id: 163, date: '2017-03-01' }, { id: 190, date: '2017-03-02' }, { id: 321, date: '2017-03-05' }, { id: 444, date: '2017-03-17' }],
lastDate = data[data.length - 1].date;
data.sort(function (a, b) {
return (b.date === lastDate) - (a.date === lastDate);
});
console.log(data);
data.sort(function (a, b) {
return (b.date === lastDate) - (a.date === lastDate) || a.id - b.id;
});
console.log(data);
,这些值均为创建顺序。< / p>
.as-console-wrapper { max-height: 100% !important; top: 0; }
var data = [{ id: 0, date: '2017-01-01' }, { id: 2, date: '2017-01-01' }, { id: 5, date: '2017-01-02' }, { id: 6, date: '2017-01-05' }, { id: 9, date: '2017-01-06' }, { id: 19, date: '2017-01-11' }, { id: 24, date: '2017-02-01' }, { id: 67, date: '2017-02-01' }, { id: 80, date: '2017-02-11' }, { id: 90, date: '2017-02-21' }, { id: 101, date: '2017-02-23' }, { id: 149, date: '2017-02-28' }, { id: 163, date: '2017-03-01' }, { id: 190, date: '2017-03-02' }, { id: 321, date: '2017-03-05' }, { id: 444, date: '2017-03-17' }];
data.unshift(data.pop());
console.log(data);
另一种解决方案是,将Array#sort
用于最后一项,将Array#pop
用于插入数组的顶部位置。
.as-console-wrapper { max-height: 100% !important; top: 0; }
// The 3rd party Java 7 class
public class Fizz {
private Foo foo;
private Buzz buzz;
public Fizz() {
// ...
}
public Fizz(Buzz buzz) {
// ...
}
// Getters and setters for foo + buzz down here
}
// My Scala classes
abstract class Bar(val foo : Foo) extends Fizz {
// So I want my Bar API to accept a Foo, create an instance of Fizz via
// its no-arg ctor, and then call setFoo(...) with the foo accepted here.
}
class SkyBar extends Bar {
// ...
}
class SpaceBar extends Bar {
// ...
}