回答:
以下のようlodash 3.5.0を使用できsortByOrder(名前を変更ORDERBYを v4.3.0には):
var data = _.sortByOrder(array_of_objects, ['type','name'], [true, false]);
バージョン3.10.0以降、順序付けに標準のセマンティクス(asc、desc)を使用することもできます。
var data = _.sortByOrder(array_of_objects, ['type','name'], ['asc', 'desc']);
では、バージョン4 lodashこのメソッドの名前が変更されました[並べ替え:
var data = _.orderBy(array_of_objects, ['type','name'], ['asc', 'desc']);
_.sortByOrder is not a function
lodashの最新バージョンで。
, ['asc', 'desc']
部分はlodash@4.17.10で無視されています。すべてが昇順にソートされています。
_.sortBy
。_.orderBy
代わりに試してください。お役に立てれば。
いつでも使用できます Array.prototype.reverse()
var data = _.sortBy(array_of_objects, ['type', 'name']).reverse();
特定のプロパティを降順に並べ替える場合は、末尾に.reverse()を追加するだけでは、すべての並べ替えが降順になるため、注意する必要があります。
特定のソートを降順にするには、ソートを最下位から最上位にチェーンし、降順にする各ソートの後に.reverse()を呼び出します。
var data = _(data).chain()
.sort("date")
.reverse() // sort by date descending
.sort("name") // sort by name ascending
.result()
_の並べ替えは安定した並べ替えなので、2つの項目のプロパティの値が同じである場合、それらの順序が保持されるため、安全にチェーンおよび逆順に並べ替えることができます。
ディープフィールド&マルチフィールド&異なる方向の注文Lodash> 4
var sortedArray = _.orderBy(mixedArray,
['foo','foo.bar','bar.foo.bar'],
['desc','asc','desc']);
列ごとに方向を定義する便利な方法はありますか?
いいえ。値を逆にするコールバック関数以外ではソート順を指定できません。複数列の並べ替えでは、これは不可能です。
あなたができるかもしれません
_.each(array_of_objects, function(o) {
o.typeDesc = -o.type; // assuming a number
});
_.sortBy(array_of_objects, ['typeDesc', 'name'])
それ以外の場合は.sort()
、カスタム比較関数を使用してネイティブに頼る必要があります。
array_of_objects.sort(function(a, b) {
return a.type - b.type // asc
|| +(b.name>a.name)||-(a.name>b.name) // desc
|| …;
});
バージョン4.11.xのドキュメントでは、次のように述べています。 、降順の場合は「desc」、対応する値の昇順の場合は「asc」の順序を指定します。(ソースhttps://lodash.com/docs/4.17.10#orderBy)
let sorted = _.orderBy(this.items, ['fieldFoo', 'fieldBar'], ['asc', 'desc'])
_.sortByOrder
か?
これを試すこともできます:
var data= _.reverse(_.sortBy(res.locals.subscriptionList.items, ['type', 'name']));