2017-03-16 69 views
1

对不起,没有把标题中的具体排序,但我不能正确地说。是否可以使用sort()以这种特定方式对对象数组进行排序?

我正在排序的文件对象的名单,如名称,上传日期和类别的列表,我需要排序它的方式,最后上传的文件推到顶部,其余aren没有排序。

因此,例如,如果我有从最旧到最新的按降序排列的列表,我仍然希望最新的列表位于顶部。

从数据库返回时,列表已经按照类别,日期等进行了排序,所以我只需要进一步对它进行排序。

它必须在传递给sort()的函数中完成。

+0

一切皆有可能显示你已经完成的工作是什么 –

回答

0

Array#sort不一定稳定,只要您排序只是一个属性作为第一个结果。

您需要为移动等于(与0引起的)项目对地方了,这里的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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

另一解决方案是,使用Array#pop为最后一个项目和Array#unshift在顶部处所述阵列的插入。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

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)函数返回-11,或0基于label

注: for循环for-of作品ES2015 +,这是最流行的浏览器和Node.js的不过,如果你需要支持显著旧的浏览器,你可能要考虑使用一般for-loop

相关问题