2017-06-09 6 views
1

は、私は彼らの量(fruit_quantity/vegetable_quantity)で、オブジェクトの配列を持っている:私はそれらの量でソートしようとしていますlodash - 異なるキーの値に基づいて並べ替えますか?

ので、最低から最高のlodashとの順序を示しています。

var sortedItems = _.sortBy(items, 'quantity').reverse(); 

しかし残念ながら、私は別のキーを使用する必要がありますが、まだ並べ替え、それぞれの持つ:

var items = [ 
    {'type': 'fruit', 'name': 'apple', 'fruit_quantity': 20}, 
    {'type': 'fruit', 'name': 'banana','fruit_quantity': 10}, 
    {'type': 'vegetable', 'name': 'brocolli','vegetable_quantity': 15}, 
    {'type': 'fruit', 'name': 'cantaloupe','fruit_quantity': 5} 
]; 

var sortedItems = _.sortBy(items, ['fruit_quantity' || 'vegetable_quantity']).reverse(); 

私は、彼らがquantityのように、同じキーであれば、それはこのように行われることを知っています量。ここで

は私の試みとフィドルです: https://jsfiddle.net/zg6js8af/1/

どのように私は最低の量に彼らの最高でアイテムを並べ替えることができますか?あなただけ存在するプロパティを検出し、それを返す必要が

{'type': 'fruit', 'name': 'apple', 'fruit_quantity': 20}, 
{'type': 'vegetable', 'name': 'brocolli','vegetable_quantity': 15}, 
{'type': 'fruit', 'name': 'banana','fruit_quantity': 10}, 
{'type': 'fruit', 'name': 'cantaloupe','fruit_quantity': 5} 
+0

は、あなたがvegetable_quantity' 'によってそれらをソートしたいと2番目の 'fruit_quantity'は' descending'ですか?あるいは、一般的な数量で並べ替えるだけですか? – AndreaM16

+0

基本的に最高から最低までの量、果物または野菜の量は同じであるはずです。 – Wonka

答えて

2

これは、最終的なソート順がどのように見えるかです。 Array#sortを使用した例:

var items = [ 
 
    {'type': 'fruit', 'name': 'apple', 'fruit_quantity': 20}, 
 
    {'type': 'fruit', 'name': 'banana','fruit_quantity': 10}, 
 
    {'type': 'vegetable', 'name': 'brocolli','vegetable_quantity': 15}, 
 
    {'type': 'fruit', 'name': 'cantaloupe','fruit_quantity': 5} 
 
]; 
 

 
function getQuantity(item) { 
 
    return item.fruit_quantity || item.vegetable_quantity || 0; 
 
} 
 

 
items.sort(function(a, b) { 
 
    return getQuantity(a) - getQuantity(b); 
 
}); 
 

 
console.log(items);

あなたが_.sortBy()と同じ操作を行うことができますので、

var items = [ 
 
    {'type': 'fruit', 'name': 'apple', 'fruit_quantity': 20}, 
 
    {'type': 'fruit', 'name': 'banana','fruit_quantity': 10}, 
 
    {'type': 'vegetable', 'name': 'brocolli','vegetable_quantity': 15}, 
 
    {'type': 'fruit', 'name': 'cantaloupe','fruit_quantity': 5} 
 
]; 
 

 
function getQuantity(item) { 
 
    return item.fruit_quantity || item.vegetable_quantity || 0; 
 
} 
 

 
var result = _.sortBy(items, getQuantity); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+0

魅力的な作品です。ありがとうございます:) – Wonka

+0

なぜそれらの量が存在しない場合は、 '0'の戻り値があるのだろうと思っています。また、私のフィドルでは '_.sortBy()'で動作しますが、上記のRunコードスニペットを打つことは何らかの理由で正しくソートされません。 – Wonka

+0

0は 'fruit_quantity'の値が0の場合です。この場合、' vegetable_quantity'は未定義であるため、0を返したいと思います。ソートの問題があります。確認中... –

関連する問題