2016-09-08 1 views
1

ich ein JSON-Daten mit dem folgenden Format haben:Formatieren wird eine JSON-Daten unter Verwendung von lodash

Aktivitäten

[ 
    { 
    "id": 32, 
    "poi_id": 1, 
    "due_date": "2016-09-08T18:15:00.000Z", 
    "items": [ 
     { 
     "id": 21, 
     "name": "Choluv jar : JAR", 
     "activity_id": 32 
     } 
    ] 
    }, 
    { 
    "id": 30, 
    "poi_id": 9, 
    "due_date": "2016-09-14T18:15:00.000Z", 
    "items": [ 
     { 
     "id": 17, 
     "name": "Bourbon Family : PKT", 
     "activity_id": 30 
     }, 
     { 
     "id": 18, 
     "name": "Choluv jar : JAR", 
     "activity_id": 30 
     } 
    ] 
    }, 
    { 
    "id": 29, 
    "poi_id": 1, 
    "due_date": "2016-09-27T18:15:00.000Z", 
    "items": [ 
     { 
     "id": 16, 
     "name": "Choluv jar : JAR", 
     "activity_id": 29 
     } 
    ] 
    } 
] 

ich diese Daten mit lodash oder einfach Javascript aussehen zu formatieren wollen wie folgt:

/*poi_id is the key*/ 

    "1": [{ 
    "id": 32, 
    "poi_id": 1, 
    "due_date": "2016-09-08T18:15:00.000Z", 
    "items": { 
     /*due_date is the key*/ 

     "2016-09-08T18:15:00.000Z": [{ 
     "id": 21, 
     "name": "Choluv jar : JAR", 
     "activity_id": 32 
     }] 
    } 
    }, { 
    "id": 29, 
    "poi_id": 1, 
    "due_date": "2016-09-27T18:15:00.000Z", 
    "items": { 
     "2016-09-27T18:15:00.000Z": [{ 
     "id": 16, 
     "name": "Choluv jar : JAR", 
     "activity_id": 29 
     }] 
    } 
    }], 

    "9": [{ 
    "id": 30, 
    "poi_id": 9, 
    "due_date": "2016-09-14T18:15:00.000Z", 
    "items": { 
     "2016-09-14T18:15:00.000Z": [{ 
     "id": 17, 
     "name": "Bourbon Family : PKT", 
     "activity_id": 30 
     }, { 
     "id": 18, 
     "name": "Choluv jar : JAR", 
     "activity_id": 30 
     }] 
    } 
    }] 

Alles, was ich will, ist th e-Daten, die die gleichen mit dem key von poi_id und gleiche gilt für die Elemente mit gleichen DUE_DATE poi_id unter einer Sammlung.

Hier ist, was ich bisher getan habe:

let activityArray = {}; 
_.forEach(activities, (activityItem) => { 
    if (!activityArray[activityItem.poi_id]) { 
    activityArray[activityItem.poi_id] = []; 
    } 
    activityArray[activityItem.poi_id].push(activityItem); 
    _.forEach(activityArray[activityItem.poi_id], (value, key) => { 
    activityArray[activityItem.poi_id][key].items.unshift(activityArray[activityItem.poi_id][key].due_date); 
    }); 
}); 

Und das ist, was ich habe:

"1": [{ 
    "id": 32, 
    "poi_id": 1, 
    "due_date": "2016-09-08T18:15:00.000Z", 

    /*unShift added due_date twice here, I want here key value pair*/ 

    "items": [ 
     "2016-09-08T18:15:00.000Z", 
     "2016-09-08T18:15:00.000Z", { 
     "id": 21, 
     "name": "Choluv jar : JAR", 
     "activity_id": 32 
     } 
    ] 
    }, { 
    "id": 29, 
    "poi_id": 1, 
    "due_date": "2016-09-27T18:15:00.000Z", 
    "items": [ 
     "2016-09-27T18:15:00.000Z", { 
     "id": 16, 
     "name": "Choluv jar : JAR", 
     "activity_id": 29 
     } 
    ] 
    }], 
    "9": [{ 
    "id": 30, 
    "poi_id": 9, 
    "due_date": "2016-09-14T18:15:00.000Z", 
    "items": [ 
     "2016-09-14T18:15:00.000Z", { 
     "id": 17, 
     "name": "Bourbon Family : PKT", 
     "activity_id": 30 
     }, { 
     "id": 18, 
     "name": "Choluv jar : JAR", 
     "activity_id": 30 
     } 
    ] 
    }] 

ich mit anderen Ansätzen versucht auch, aber konnte es nicht wie das machen Ich erwarte.

Bitte führen Sie mich hier.

Danke.

Antwort

1

Eine kompakte Lösung in plain Javascript mit einem Objekt als Hash für die Elemente Arrays.

var activities = [{ "id": 32, "poi_id": 1, "due_date": "2016-09-08T18:15:00.000Z", "items": [{ "id": 21, "name": "Choluv jar : JAR", "activity_id": 32 }] }, { "id": 30, "poi_id": 9, "due_date": "2016-09-14T18:15:00.000Z", "items": [{ "id": 17, "name": "Bourbon Family : PKT", "activity_id": 30 }, { "id": 18, "name": "Choluv jar : JAR", "activity_id": 30 }] }, { "id": 29, "poi_id": 1, "due_date": "2016-09-27T18:15:00.000Z", "items": [{ "id": 16, "name": "Choluv jar : JAR", "activity_id": 29 }] }], 
 
    hash = {}, 
 
    grouped = {}; 
 

 
activities.forEach(a => { 
 
    hash[a.poi_id] = hash[a.poi_id] || {}; 
 
    hash[a.poi_id][a.due_date] = hash[a.poi_id][a.due_date] || []; 
 
    grouped[a.poi_id] = grouped[a.poi_id] || []; 
 
    grouped[a.poi_id].push({ 
 
     id: a.id, 
 
     poi_id: a.poi_id, 
 
     due_date: a.due_date, 
 
     items: { [a.due_date]: hash[a.poi_id][a.due_date] } 
 
    }); 
 
    a.items.forEach(b => hash[a.poi_id][a.due_date].push(b)); 
 
}); 
 

 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Hallo, danke für die Antwort. Aber die ** Artikel ** haben kein ** Fälligkeitsdatum ** als Schlüssel für Ihre Lösung. –

+0

@TusharKhatiwada, Sie haben Recht, siehe Bearbeiten. –

Verwandte Themen