2017-11-14 4 views
0

私のAPIから戻るJSONがあります。normalizr新しいプロパティとグループを設定する

[{ 
     "_id": "id1", 
     "userId": "u1", 
     "createdOn": "2017-11-13T19:24:05.269Z" 
    }, { 
     "_id": "id2", 
     "userId": "u2", 
     "createdOn": "2017-11-13T19:23:59.777Z" 
    }, { 
     "_id": "id3", 
     "userId": "u3", 
     "createdOn": "2017-11-09T17:34:14.507Z" 
    }, { 
     "_id": "id4", 
     "userId": "u4", 
     "createdOn": "2017-11-08T18:15:54.303Z" 
    } 
] 

まず私は([0] createdOn.split( "T")のような)createdOnを分割する必要があるとだけ、文字列、日付が含まれている新しいプロパティCreatedDateに設定します。次に、新しいプロパティcreatedDateに基づいてこれを分類し、同じ日付に作成されたアイテムにグループ化します。だから私は次のような構造を得ようとしています。

{ 
    "history": { 
     "2017-11-08": { 
      "id4": { 
       "_id": "id4", 
       "userId": "u4", 
       "createdOn": "2017-11-08T18:15:54.303Z", 
       "createdDate": "2017-11-08" 
      } 
     }, 
     "2017-11-09": { 
      "id3": { 
       "_id": "id3", 
       "userId": "u3", 
       "createdOn": "2017-11-09T17:34:14.507Z", 
       "createdDate": "2017-11-09" 
      } 
     }, 
     "2017-11-13": { 
      "id1": { 
       "_id": "id1", 
       "userId": "u1", 
       "createdOn": "2017-11-13T19:24:05.269Z", 
       "createdDate": "2017-11-13" 
      }, 
      "id2": { 
       "_id": "id2", 
       "userId": "u2", 
       "createdOn": "2017-11-13T19:23:59.777Z", 
       "createdDate": "2017-11-13" 
      } 
     } 
    } 
} 

は、私はまた、複数のスキーマ

 export const historySchema = new schema.Entity(
     "history", 
     {}, 
     { idAttribute: "_id" }, 
    ); 

    export const historyGroupingSchema = new schema.Entity(
     "history", 
     { el: [historySchema] }, 
     { idAttribute: "createdDate" }, 
    ); 

normalize(history, [ 
     historyGroupingSchema, 
    ]) 

(spliting日付時刻文字列のために) 'processStrategy' が異なるオプションを試してみましたが、動作しません。 normalizrでこれを行う方法。

答えて

0

作成日のちょうど日付部分に基づいてオブジェクトを分類するには、各オブジェクトをループし、作成された日付(2番目の質問)を解析する必要があります。ちょうど日付を返す関数を作成しました。あなたは、あなたがループ配列をすることができます日付を解析し、同日私が取得しようとしています

var p=[{ 
 
     "_id": "id1", 
 
     "userId": "u1", 
 
     "createdOn": "2017-11-13T19:24:05.269Z" 
 
    }, { 
 
     "_id": "id2", 
 
     "userId": "u2", 
 
     "createdOn": "2017-11-13T19:23:59.777Z" 
 
    }, { 
 
     "_id": "id3", 
 
     "userId": "u3", 
 
     "createdOn": "2017-11-09T17:34:14.507Z" 
 
    }, { 
 
     "_id": "id4", 
 
     "userId": "u4", 
 
     "createdOn": "2017-11-08T18:15:54.303Z" 
 
    } 
 
]; 
 

 
    function getDatepart(createdOn) 
 
    { 
 
    var dateFieldValue= new Date(createdOn) 
 
    var year = dateFieldValue.getFullYear()+""; 
 
    var month = (dateFieldValue.getMonth()+1)+""; 
 
    var day = dateFieldValue.getDate()+""; 
 
    var dateFormat = year + "-" + month + "-" + day;//use your format 
 
    console.log(dateFormat) 
 
    return dateFormat; 
 
    
 
    } 
 
    getDatepart(p[0].createdOn)

+0

を持つオブジェクトを取得したら momentjs特別に入手可能な他の良いJSライブラリがあるフォーマットを変更することができますこれはnormalizr [https://github.com/paularmstrong/normalizr]によって行われました。私が言及したものは、日付コンポーネントを取得するのに十分です(「T」で分割して最初の要素を取ります) – Edayan

関連する問題