С lodash это одна строка с .omit и .extend :
const data = [ { "id": 11705294, "billingItemId": 361643044, "cancellationRequestId": 17289674, "immediateCancellationFlag": true, "scheduledCancellationDate": null, "serviceReclaimStatusCode": "COMPLETE", "billingItem": { "id": 361643044, "recurringFee": 0, "description": "Storage as a Service", "cancellationDate": "2018-11-27T10:20:42-06:00", "domainName": null, "hostName": null, "item": { "id": 9571, "description": "Storage as a Service", "keyName": "STORAGE_AS_A_SERVICE", "longDescription": null, "units": "N/A", } } }, { "id": 11705292, "billingItemId": 361643052, "cancellationRequestId": 17289672, "immediateCancellationFlag": true, "scheduledCancellationDate": null, "serviceReclaimStatusCode": "COMPLETE", "billingItem": { "id": 361643052, "recurringFee": 0, "description": "Storage as a Service", "cancellationDate": "2018-11-27T10:18:18-06:00", "domainName": null, "hostName": null, "item": { "id": 9571, "description": "Storage as a Service", "keyName": "STORAGE_AS_A_SERVICE", "longDescription": null, "units": "N/A", } } } ]
const result = _.flatMap(data, x => _.omit(_.extend(x, {item: x.billingItem.item}), ['billingItem']))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Более понятный пример будет с lodash chaining
:
const data = [ { "id": 11705294, "billingItemId": 361643044, "cancellationRequestId": 17289674, "immediateCancellationFlag": true, "scheduledCancellationDate": null, "serviceReclaimStatusCode": "COMPLETE", "billingItem": { "id": 361643044, "recurringFee": 0, "description": "Storage as a Service", "cancellationDate": "2018-11-27T10:20:42-06:00", "domainName": null, "hostName": null, "item": { "id": 9571, "description": "Storage as a Service", "keyName": "STORAGE_AS_A_SERVICE", "longDescription": null, "units": "N/A", } } }, { "id": 11705292, "billingItemId": 361643052, "cancellationRequestId": 17289672, "immediateCancellationFlag": true, "scheduledCancellationDate": null, "serviceReclaimStatusCode": "COMPLETE", "billingItem": { "id": 361643052, "recurringFee": 0, "description": "Storage as a Service", "cancellationDate": "2018-11-27T10:18:18-06:00", "domainName": null, "hostName": null, "item": { "id": 9571, "description": "Storage as a Service", "keyName": "STORAGE_AS_A_SERVICE", "longDescription": null, "units": "N/A", } } } ]
const result = _.flatMap(data, x => _(x)
.extend({item: x.billingItem.item})
.omit(['billingItem'])
.value()
);
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
Это в значительной степени считывает то, что происходит, что является одним из преимуществ lodash
цепочки, когда речь идет о читабельности кода и т. Д.