2017-10-22 15 views
1

私はこのようなオブジェクトがあります。サブオブジェクト値でオブジェクトのオブジェクトを並べ替える方法は?

let objectExample = { 
    key1: { prop1: '123', prop2: 'def' }, 
    key2: { prop1: '456', prop2: 'ghi' }, 
    key3: { prop1: '789', prop2: 'abc' } 
}; 

そして、それはprop2の値でソートした後、次のようにする必要があります。

let objectSorted = { 
    key3: { prop1: '789', prop2: 'abc' }, 
    key1: { prop1: '123', prop2: 'def' }, 
    key2: { prop1: '456', prop2: 'ghi' } 
}; 

私はここにいくつかの例を見てきましたが、彼らは今、あまりにも読めない見て、初心者として私を怖がら:また、D 私が見てきた質問は、6年前、同じように、求められています。

+0

これを試すことができます:https://jsfiddle.net/zo0v9oLr/ – Krusader

+0

組み込みのカット、コピー&ペースト機能を使用してください –

答えて

0

オブジェクトのプロパティを並べ替える方法はありません。インデックスの順序はありません。要素の特定の順序を保持するには、オブジェクトではなく配列を使用する必要があります。そして、ここでアルファベット順に配列をソートする方法を、例です。

let arrExample = [ 
 
    { prop1: '123', prop2: 'def' }, 
 
    { prop1: '456', prop2: 'ghi' }, 
 
    { prop1: '789', prop2: 'abc' } 
 
]; 
 

 
arrExample.sort(function(a, b){ 
 
    if(a.prop2 < b.prop2) return -1; 
 
    if(a.prop2 > b.prop2) return 1; 
 
    return 0; 
 
}) 
 

 
console.log(arrExample);

+0

しかし、ソートされたサブオブジェクトに添付されたキーを再配置して、 'objectSorted'とまったく同じものを取得する必要があります。私は、2つの配列(ソートされたものとキーの1つ( 'arrayOfKeys'))から新しいオブジェクトを作成するようなものかもしれません。しかし 'arrayOfKeys'をどのように並べ替えるのですか? – VELFR

0

は申し訳ありませんが、今のノートパソコンを持っていません。しかし、以下のコードは役に立ちます。

let objectExample = { key1: { prop1: '123', prop2: 'def' }, key2: { prop1: '456', prop2: 'ghi' }, key3: { prop1: '789', prop2: 'abc' } }; 

let objectSorted = {}; 
Object.keys(objectExample).sort((key1,key2) => { 
    return objectExample[key1].prop2.localeCompare(objectExample[key2].prop2); 
}).forEach((element) => { 
    objectSorted[element] = objectExample[element]; 
}); 

console.log(JSON.stringify(objectSorted)); 
+0

これは文字列化されたJSONで動作しますが、解析するとその順序は失われます。例を参照してください:https://jsfiddle.net/hwe1vmva/1/ –

+0

説明が必要な場合 keys関数はオブジェクトからキーを抽出し、配列を作成します。 次に、比較関数に応じて、そのキー配列をソートするソートを適用しました。 比較機能では、2つのキーを取得し、localeCompareを実行します。 localeCompareメソッドは、値を比較し、ロケールに基づいて辞書ソートを行います。 -1、0、+1を返します。 ソートされたキーに基づいて得られたオブジェクトを設定します。 問題が見つかった場合は教えてください。 – Agnibha

+0

@CommercialSuicideはいあなたの意見に同意します。 javascript内のオブジェクトは、順序を維持するためのものではありません。彼はそれについて尋ねたので、私はstringifyを使用しました。 – Agnibha

0

私はオブジェクトキーの順序に依存しません。最も適切なのは、明示的に順序付けされているので、ソート目的で配列を使用することです。オブジェクトキーの場合は、おそらくそれらを順序通りに扱うべきです...私はそれらをセットと考えるでしょう。

これが言っているように、オブジェクトキーには、for..inまたはObject.keysを使用して反復するときに表示されるように、最後に挿入順があります。設定したキーの順序を簡単に変更することはできません。唯一の方法は、キーを削除してからもう一度設定して、最後の位置に「移動」することです。しかし、やはり、このようなことをすることが可能であっても、私はそれをまったくお勧めしません...それらを並べ替えることはあまりありません。配列を使用し、配列によって提供されるsortメソッドを使用します。

関連する問題