javascript - 如何用 2 个嵌套对象展平数组并将其变为一个
问题描述
我正在对一个元素数组进行平面映射,我得到这个:
tableRowsItems = _.flatMap(data.SoftLayerCancellationRequests, 'items');
它返回这个:
[
{
"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",
}
}
}
]
所以最后我需要这样的东西:
[
{
"id": 11705294,
"billingItemId": 361643044,
"cancellationRequestId": 17289674,
"immediateCancellationFlag": true,
"scheduledCancellationDate": null,
"serviceReclaimStatusCode": "COMPLETE",
"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)。
const obj = {"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"}}};
// Extract `id` from billingItem, and assign all other
// billingItem properties to `restItem` using rest parameters
// Assign all the other (non-billingTime) properties of obj
// to the variable `rest`
const { billingItem: { id, ...restItem }, ...rest } = obj;
// Spread `rest` and `restItem` back out to create
// the new properties of the new object. Note: we haven't
// added that id here - we've plucked it from the object and
// discarded it
const newObj = { ...rest, ...restItem };
console.log(newObj);
如果您有这些对象的数组,只需使用map
返回一个新对象的新数组。
const arr = [{"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"}}}];
const newArr = arr.map(obj => {
const { billingItem: { id, ...restItem }, ...rest } = obj;
return { ...rest, ...restItem };
});
console.log(newArr);
推荐阅读
- linux - 如何使用 crontab 运行 SVN 命令
- keras - 将 Keras 多个 input_shape 转换为 TensorFlow Lite
- c# - 组数据表父子
- r - CheckboxInput 与 DT R Shiny 中的编辑表
- raspberry-pi - 在树莓派 2 上设置时出现 Nextcloud 错误
- php - 我不知道如何将日期从 js 视图发送到 laravel 服务器
- python - 如何将 pandas groupby() 对象存储在具有不同索引的同一变量中
- reactjs - 我们如何根据条件禁用 antd table 的复选框?
- java - 关闭应用程序时服务不执行,但在后台执行时会执行
- swift - 关闭屏幕后列表未更新