2017-01-28 4 views
0

私は以下のような配列を持っていて、配列内のアイテムを価格でlodashを使って並べ替えることを試みていますが、動作していません。ここで何が間違っているのかを教えてください。lodashのドキュメントでは配列を取り、ソートされた配列を返すべきです。Lodash sortByでソートするにはどうすればいいですか?

var items= [ 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Auto Biography", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 200, 
    "sold": 0 
    }, 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Science Fiction", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 120, 
    "sold": 0 
    }, 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Language", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 125, 
    "sold": 0 
    }, 
    { 
    "total": 11, 
    "productGroup": { 
     "_id": "5834754f0acc770ce14b1378", 
     "name": "Fiction", 
     "description": "Yum", 
     "type": "book" 
    },  
    "_id": "58791af46c698c00475e7f41",  
    "price": 300, 
    "sold": 0 
    } 
] 

ソートコード

items = _.sortBy(items, item=>{return item.price}); 
+0

それは代わりに何をしているのですか? – Soviut

+0

使用しているロダッシュのバージョンは何ですか? – Soviut

答えて

1

マイデータはsource codeによれば、第二の引数はiterateesの配列でなければなりません。問題を解決するには、配列内に無名関数を入れる必要があります。

items = _.sortBy(items, [item=>{return item.price}]); 
+2

この回答を展開して、正しい実装の例を示してください。 – Soviut

+0

回答ありがとうございます。残念ながら、上記のようにコードを変更しても、まだソートされた配列が返されていない場合でも、そのまま配列を返しています。 –

2

おそらく古いバージョンのLodashを使用している可能性があります。これは以下に示すように4.17.2で動作します。

var items = [ 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 200 
 
    }, 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 120 
 
    }, 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 125 
 
    }, 
 
    { 
 
    "_id": "58791af46c698c00475e7f41",  
 
    "price": 300 
 
    } 
 
]; 
 

 
var results = _.sortBy(items, item => item.price); 
 
console.log(results);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

+0

@ruakhありがとう、私はそれを含める答えを更新しました – Soviut

+0

私はスニペットを含むように私の答えを更新しました。ほとんどの場合、ロダッシュのバージョンです。 – Soviut

関連する問題