2017-11-11 24 views
-2

私はJavaScriptで.sort()メソッドを使用してAZ注文することができますが、私はこのようなJSONになるだろう:(結果を含む「AZ」インデックス付き)JSONをアルファベット順にJavaScriptで並べる方法は?

data: { 
     "A": [ 
     { 
      "name": "Anh Tuan Nguyen", 
      "age": 28 
     }, 
     { 
      "name": "An Nguyen", 
      "age": 20 
     }, 
     ], 
     "Z": [ 
     { 
      "name": "Zue Dang", 
      "age": 22 
     }, 
     { 
      "name": "Zoom Jane", 
      "age": 30 
     }, 
     ] 
    } 
+0

名前の最初の文字に基づいてグループ化しますか? –

+0

こんにちは@Marco。あなたの周りにいるニース。あなたの質問への良い答えを得るために、あなたの側に少し仕事があります。これまでに試したことを示すコードをご提供ください。 –

+0

ソース配列を、あなたが望む結果に似たオブジェクトであると仮定して応答する種類の人々として投稿したいと思うかもしれません。 – James

答えて

0

UPDATE:Lodashユーティリティ: は、それを可能にするJavaScriptライブラリ存在(https://lodash.com/docs/4.17.4)。 .sort()JSON(配列なし)のメソッドと、この質問で尋ねたJSONを取得するメソッドがあります。私はこれをしなかった:

//First, order my JSON alphabetically with _.sortBy method (I can even order by a nested property in my JSON)  
var order = _.sortBy(require('./names'), function (el) { return el.name }); 

//Second, I group my order result by the first letter of my property 'name' in my JSON 
var list = _.groupBy(order, (b) => b.name[0].toUpperCase()); 

これは私の入力です:

[ 
    {"name":"Mark"}, 
    {"name":"Jul"}, 
    {"name":"Alicia"}, 
] 

これが私の出力です:

[ 
"A": [ 
    { 
     "name": "Alicia" 
    } 
    ], 
    "J": [ 
    { 
     "name": "Jul" 
    }, 
    ], 
    "M": [ 
    { 
     "name": "Mark" 
    }, 
    ] 

私は誰かにこのヘルプを願っています!

-1

ソートする方法はありません

  • がであなたの注文した鍵を変換するreduce関数を作成します

    1. はあなたのキーObject.keys(myResults.data)
    2. 並び替えであなたのdataキーを取得します:JSONデータ構造は、しかし、我々は次のプロセスを使用してそれを行うことができますスニペットはここにある注文対象

    に、私はそれが役に立てば幸い:

    var myResults = { 
     
        data: { 
     
        C: [ 
     
         { 
     
         "name": "Kevin Doe", 
     
         "age": 22 
     
         } 
     
        ], 
     
        A: [ 
     
         { 
     
         "name": "Alex Doe", 
     
         "age": 31, 
     
         } 
     
        ], 
     
        B: [ 
     
         { 
     
          "name": "Boris Doe", 
     
          "age": 22 
     
         }, 
     
         { 
     
          "name": "Birdo Doe", 
     
          "age": 30 
     
         }, 
     
        ] 
     
        } 
     
    }; 
     
    
     
    var originalData = myResults.data; 
     
    
     
    // 1. get the keys 
     
    var dataKeys = Object.keys(originalData); 
     
    
     
    // 2. sort the keys 
     
    var sortedKeys = dataKeys.sort(); 
     
    
     
    // 3. create the object again 
     
    var orderedData = sortedKeys.reduce(function(result, key) { 
     
        return Object.assign(
     
        {}, 
     
        result, 
     
        { [key]: myResults.data[key] } 
     
    ); 
     
    }, {}); 
     
    
     
    document.getElementById('original').innerHTML = JSON.stringify(originalData); 
     
    document.getElementById('sorted').innerHTML = JSON.stringify(orderedData);
    h3 { 
     
        margin: 0; 
     
    } 
     
    
     
    code { 
     
        display: block; 
     
        margin-bottom: 15px; 
     
        padding: 10px; 
     
        background-color: #f9f9f9; 
     
    }
    <h3>Original Data</h3> 
     
    <code id="original"></code> 
     
    
     
    <h3>Ordered Data</h3> 
     
    <code id="sorted"></code>

  • +0

    これは私のために働く!ありがとう!! –

    +0

    確かに、答えを正しいとマークしてもよろしいですか? :) @MarcoDuarte – adielhercules

    1
    var names = [{name:"a1"},{name:"a2"},{name:"b1"},{name:"b2"}.....]; 
    var data = {}; 
    for (var i = 0; i < names.length; i++) { 
    var n = names[i].name.subStr(0,1); 
    if (data[n] == null) 
        data[n] = []; 
        data[n].push(names[i]); 
            } 
    
    +0

    これはおそらく、ソースデータが配列であると仮定して正しいでしょう。 – James

    +0

    配列ではなくオブジェクトの場合は、 "for(var i = 0; i

    0

    オブジェクトが発注されていませんJavaScriptが。あなたは、オブジェクトのプロパティを反復処理したい場合は、キーをソートした後、あなたの値を取得することができます

    const result = { 
     
        data: { 
     
        Z: [], 
     
        F: [], 
     
        A: [], 
     
        D: [] 
     
        } 
     
    }; 
     
    
     
    Object 
     
        .keys(result.data) 
     
        .sort() 
     
        .map(key => console.log(key, result.data[key]));

    関連する問題