2017-07-31 10 views
0

私は、複数のレベルでgroup byを使用して、オブジェクトがタグ、フォルダ、レポートキーでグループ化されるようにしています。私はシングルレベルでgroupbyすることができましたが、それ以上は進めませんでした。多レベルgroupby ramda js

const data = [{ 
 
    "_index": "search_index", 
 
    "_type": "search_type", 
 
    "_id": "Co5EFxnqeo9ruq", 
 
    "_score": 1, 
 
    "_source": { 
 
    "admin_tags": [], 
 
    "type": "human", 
 
    "folder": "Feature Samples", 
 
    "url_t": "url_tdata", 
 
    "users": [ 
 
     128 
 
    ], 
 
    "agent_id": 2, 
 
    "url": "url_data", 
 
    "favorited_by": [20], 
 
    "idx": 121, 
 
    "path": "Report Samples//Feature Samples", 
 
    "name": "Grouping and Sorting", 
 
    "description": "" 
 
    } 
 
}]; 
 

 
const mapIndexed = R.addIndex(R.map); 
 

 
const tg = mapIndexed((x, i) => ({ 
 
    "name": x._source.admin_tags[0] == undefined ? "Unclasified" : x._source.admin_tags[0], 
 
    "idx": i, 
 
    "folder": [{ 
 
    "name": x._source.folder, 
 
    "idx": x._source.folder, 
 
    "report": [{ 
 
     "agent_id": x._source.agent_id, 
 
     "description": x._source.description, 
 
     "favorited_by": x._source.favorited_by[0], 
 
     "name": x._source.name, 
 
     "idx": x._source.idx, 
 
     "path": x._source.path, 
 
     "type": x._source.type, 
 
     "url": x._source.url, 
 
     "url_t": x._source.url_t, 
 
    }] 
 
    }] 
 
}), data); 
 

 
const byTag = R.groupBy(data => data.name) 
 
const tagged = byTag(tg); 
 
console.log(tagged)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>

これは、私は常にゼロに設定user_report_id、ビュー、3つのレベルと値でグループ化して達成しようとしています出力されます。

const output = { 
    "message": "", 
    "payload": [{ 
    "name": "Unclasified", 
    "idx": 0, 
    "folders": [{ 
     "idx": "Feature Samples", 
     "name": "Feature Samples", 
     "reports": [{ 
     "agent_id": 2, 
     "description": "", 
     "idx": 121, 
     "is_fav": 20, 
     "name": "Grouping and Sorting", 
     "type": "human", 
     "url": "url_data", 
     "url_t": "url_tdata", 
     "user_report_id": 0, 
     "views": 0, 
     "report_id": '2sdfsd' 
     }] 
    }] 
    }] 
} 
+0

ここでは、サブアレイフォルダとレポートを初期化しましたが、グループ化されていません。複数のフォルダとレポートが存在する可能性があるため – user93

答えて

0

があるかもしれませんソリューションに組み込まれた/良く、しかし、あなたがそうのようなグループにあなたのオブジェクトの「内側のリストを」mapを使用することができます。

const data = [ 
    { letter: "a", number: 1, bool: true }, 
    { letter: "a", number: 2, bool: true }, 
    { letter: "a", number: 2, bool: false }, 
    { letter: "b", number: 1, bool: true }, 
    { letter: "b", number: 1, bool: false }, 
    { letter: "b", number: 1, bool: false }, 
    { letter: "c", number: 1, bool: true }, 
    { letter: "c", number: 2, bool: true }, 
    { letter: "c", number: 2, bool: false }, 
    { letter: "c", number: 2, bool: true }, 
]; 

const groupByLetterNumberBool = pipe(
    groupBy(prop("letter")), 
    map(groupBy(prop("number"))), 
    map(map(groupBy(prop("bool")))) 
); 

groupByLetterNumberBool(data); 

here作業します。

関連する問題