2017-10-16 8 views
2

ブール値を使用してオブジェクト内のオブジェクトをソートする方法があるかどうかを調べようとしています。私は助けるものを見つけることができず、可能であれば確信もしていません。JS - オブジェクト内の子オブジェクトのソート

マイオブジェクトの例はこれです:

{ 
"Music": { 
    "Key": "Music", 
    "Title": "Music", 
    "Icon": "t-music", 
    "Colour": "blue", 
    "Active": false 
}, 
"The Arts": { 
    "Key": "The Arts", 
    "Title": "The Arts", 
    "Icon": "t-arts", 
    "Colour": "blue", 
    "Active": false 
}, 
"Social": { 
    "Key": "Social", 
    "Title": "Social", 
    "Icon": "t-social", 
    "Colour": "yellow", 
    "Active": true 
} 

}

は「アクティブ」ブール値に基づいて、親オブジェクト内でこれらのオブジェクトを並べ替えることがとにかくありますか?

+2

オブジェクトには注文がありません – epascarello

+0

'Object.keys(yourObj).sort(...)'を実行すると、キーを表示する順序を得ることができます – Thomas

答えて

1

オブジェクトには並べ替え順序がありませんが、Active boolに基づいてこれらのオブジェクトを配列で整理できます。 .sort().map()を使用してください。

var obj = { 
    "Music": { 
    "Key": "Music", 
    "Title": "Music", 
    "Icon": "t-music", 
    "Colour": "blue", 
    "Active": false 
    }, 
    "The Arts": { 
    "Key": "The Arts", 
    "Title": "The Arts", 
    "Icon": "t-arts", 
    "Colour": "blue", 
    "Active": true 
    }, 
    "Social": { 
    "Key": "Social", 
    "Title": "Social", 
    "Icon": "t-social", 
    "Colour": "yellow", 
    "Active": true 
    } 
}; 

var sorted = Object.keys(obj) // ["Music", "The Arts", "Social"] 
    .sort(function(a, b) { 
    return obj[b].Active - obj[a].Active; // Organize the category array 
    }) 
    .map(function(category) { 
    return obj[category]; // Convert array of categories to array of objects 
    }); 
+1

より良い 'obj [b] .Active-obj [a ] .Active'は、 'obj [b] .Active === obj [a] .Active' – Thomas

0

オブジェクト内の秩序の概念は存在しませんが、あなたは、配列に要素を回し、それを並べ替えて、そこから新しいオブジェクトを作ることによって、視覚的に項目をシャッフルすることができます。

ネストされた値からArray#sortを使用してソートし、関数を渡すことができます。

let arr = Object.entries(obj).sort(([key1, val1], [key2, val2]) => val2.Active) 

arrayToObject = array => { 
    let newObj = {} 
    array.forEach(([key, val]) => { 
    newObj[key] = val 
    }) 
    return newObj 
} 

console.log(arrayToObject(arr)) 

// { Social: 
// { Key: 'Social', 
//  Title: 'Social', 
//  Icon: 't-social', 
//  Colour: 'yellow', 
//  Active: true }, 
// Music: 
// { Key: 'Music', 
//  Title: 'Music', 
//  Icon: 't-music', 
//  Colour: 'blue', 
//  Active: false }, 
// 'The Arts': 
// { Key: 'The Arts', 
//  Title: 'The Arts', 
//  Icon: 't-arts', 
//  Colour: 'blue', 
//  Active: false } } 
0

おかげでみんな、

私は、オブジェクトをソートすることができればわからなかったが、依頼すること痛いことはありません。 !」OBJ [A] .Active & & OBJ [B]の代わりに - '.Active OBJ [A] [B] .Active objの

ボルハの答えは私のために働いたが、私はトーマスを使用し一度だけ。アクティブです。

私はちょうどアンドリューの応答を見て、それもテストします。

関連する問題