【node.js】node.jsで辞書型valueの配列の長さでソートしたいのに・・・【ソート】

node.jsで辞書型はvalueに配列があるとソートできない

// フルーツの価格と重さ。
var fruits = [
   {name:"apple",price:100,weight:90},
   {name:"mango",price:500,weight:200},  
   {name:"orange",price:98,weight:150},
   {name:"apple",price:100,weight:100}, 
   {name:"banana",price:50,weight:50},
   {name:"melon",price:500,weight:500},
   {name:"mango",price:398,weight:200}
]

//重さ、価格、の順に並び替え(降順)

fruits.sort(function(a,b){
    if(a.weight>b.weight) return -1;
    if(a.weight<b.weight) return 1;
    if(a.price>b.price) return -1;
    if(a.price < b.price) return 1;
    return 0;
});

結果
[ { name: 'melon', price: 500, weight: 500 },
  { name: 'mango', price: 500, weight: 200 },
  { name: 'mango', price: 398, weight: 200 },
  { name: 'orange', price: 98, weight: 150 },
  { name: 'apple', price: 100, weight: 100 },
  { name: 'apple', price: 100, weight: 90 },
  { name: 'banana', price: 50, weight: 50 } ]

引用元:https://qiita.com/PianoScoreJP/items/f0ff7345229871039672

リストを含む辞書型の場合

例えば以下をvalueの長さでソートしたい場合・・・

 var items= {'fruits': ['apple', 'grape'],
            'sweets':['chocolate', 'windows'],
            'OS':['windows', 'android', 'iOS'], 
            'empty':[]} 

・・・ソート方法は見つかりませんでした。

var items= {'fruits': ['apple', 'grape'],
             'sweets':['chocolate', 'windows'],
             'OS':['windows', 'android', 'iOS'], 
             'empty':[]} 
 const result = []
 const resultSorted = {}
 for (let key in items) {
     result.push([key,items[key]])
 }
 result.sort(function(a, b) {
     return b[1].length - a[1].length
 })
 result.forEach(function(item){
     resultSorted[item[0]]=item[1]
 })
 console.log(resultSorted)

//{
//  OS: [ 'windows', 'android', 'iOS' ],
//  fruits: [ 'apple', 'grape' ],
//  sweets: [ 'chocolate', 'windows' ],
//  empty: []
//}

辞書型⇛無理やり配列化⇛ソート⇛その順番で辞書型に戻すという方法をとっています・・・。(無念)
色々探し回ったけど諦めました。(辞書型の形が色々あるけど名前がないから探すのがしんどかった・・・配列in辞書型とか辞書型in配列とか名前がほしいです。)

Stack Over Flowの外人ニキの答えは無理やりソートする手法をベストアンサーにされていたのを参考にコードを書いています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です