[英]Sort JavaScript array by 3 values
我想按三個值對這個JavaScript數組進行排序,但是我似乎無法弄清楚如何一次按多個屬性進行排序。
要求是:
featured
商品應放在最頂端 null
) featured
createdAt
的降序對所有內容進行排序( createdAt
到舊) 這是數組:
var items [
{ name: 'foo-1', featured: true, createdAt: 1493000001 },
{ name: null, featured: false, createdAt: 1493000003 },
{ name: 'foo-3', featured: true, createdAt: 1493000002 },
{ name: 'foo-4', featured: false, createdAt: 1493000004 },
{ name: 'foo-5', featured: false, createdAt: 1493000005 },
];
結果應為:
[
{ name: 'foo-3', featured: true, createdAt: 1493000002 },
{ name: 'foo-1', featured: true, createdAt: 1493000001 },
{ name: null, featured: false, createdAt: 1493000003 },
{ name: 'foo-5', featured: false, createdAt: 1493000005 },
{ name: 'foo-4', featured: false, createdAt: 1493000004 },
]
var items = [ { name: 'foo-1', featured: true, createdAt: 1493000001 }, { name: null, featured: false, createdAt: 1493000003 }, { name: 'foo-3', featured: true, createdAt: 1493000002 }, { name: 'foo-4', featured: false, createdAt: 1493000004 }, { name: 'foo-5', featured: false, createdAt: 1493000005 }, ]; items.sort(function(a, b) { if(a.featured && !b.featured) return -1; // if a is featured and b is not, then put a above b if(!a.featured && b.featured) return 1; // if b is featured and a is not, then put b above a if(!a.name && b.name) return -1; // if a doesn't have a name and b does, then put a above b if(a.name && !b.name) return 1; // if b doesn't have a name and a does, then put b above a return b.createdAt - a.createdAt; // otherwise (a and b have simillar properties), then sort by createdAt descendently }); console.log(items);
您可以使用一個比較函數,該函數可以作為參數傳遞給sort()函數-有關更多詳細信息,請參見Array.prototype.sort() 。 在您的情況下,compare函數可能如下所示:
var items = [
{ name: 'foo-1', featured: true, createdAt: 1493000001 },
{ name: null, featured: false, createdAt: 1493000003 },
{ name: 'foo-3', featured: true, createdAt: 1493000002 },
{ name: 'foo-4', featured: false, createdAt: 1493000004 },
{ name: 'foo-5', featured: false, createdAt: 1493000005 },
];
function compare(a, b) {
if (a.featured === true && b.featured === false) return -1;
if (a.featured === false && b.featured === true) return 1;
if (a.name === null && b.featured !== null) return -1;
if (a.name !== null && b.name === null) return 1;
return b.createdAt - a.createdAt;
};
items.sort(compare);
當名稱是一個空字符串時,它應該涵蓋這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.