2017-03-16 6 views
1

タイトルに特定の並べ替えを入れないと申し訳ありませんが、正しく言い切れませんでした。sort()を使ってこの特定の方法でオブジェクトの配列をソートすることはできますか?

名前、アップロードされた日付、カテゴリなどの詳細を持つファイルオブジェクトのリストをソートしています。最後にアップロードされたファイルが上部にプッシュされ、残りの部分がプッシュされるようにソートする必要がありますソートされました。

たとえば、リストを古いものから新しいものに降順にソートした場合でも、最新のものが一番上に表示されます。

リストはデータベースから返されたときにカテゴリ、日付などの点で既にソートされているので、後でそれを並べ替えるだけで済みます。

sort()に渡される関数で実行する必要があります。

+0

すべては、あなたがこれまで行ったことの可能なショーです –

答えて

0

Array#sortを使用して検討する必要があります。

あなたが作成順であるidの付加価値、とここに、適切な場所に等しい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' }], 
 
    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#unshiftためArray#popを使用するであろう。

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; }

1

これには多くの解決策があります。今、あなたがしなければならないすべては、-11、または0を返すcompare(a,b,label)機能を実装している

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 
    } 
}) 

:最も簡単な解決策として、あなたは単にあなたのソートアルゴリズムを配合あなたがすることによってこれを達成することができますhttps://lodash.com/docs/4.17.4#orderBy

0

のようなものを使用することができますlabelに基づいています。

注:ザ・ループのための最も近代的なブラウザとNode.js.あるES2015 +、中for-of作品あなたはかなり古いブラウザをサポートする必要がある場合は、あなたがいる限り、最初の結果のように並べ替えるだけで一つの特性によって、あなたのように、必ずしも安定していない一般のfor-loop

関連する問題