javascript - 仅展平嵌套的 JSON 二级
问题描述
我的 JSON 结构是这样的
var data = var data = [{"id": 451, "title": { "rendered": "title1" }, "acf": { "floor": "6", "business": [ "business" ], "status": { "value": "null", "label": "Määramata" }, "suund": "", "area": { "value": "full", "label": "Terve korrus" }, "suurus": "", "tookohad": "", }, },];
我需要展平 acf 才能在没有 acf 嵌套的情况下得到它。
var data = [
{
"id": 451,
"title": {
"rendered": "Title 1"
},
"floor": "6",
"business": [
"business"
],
"status": {
"value": "null",
"label": "Määramata"
},
"suund": "",
"area": {
"value": "full",
"label": "Full"
},
"size": "",
},
];
我尝试使用此功能
function flat(source, target) {
Object.keys(source).forEach(function (k) {
if (source[k]!== null && typeof source[k] === 'object') {
flat(source[k], target);
return;
}
target[k] = source[k];
});flatObject = {};flat(data, flatObject);console.log(flatObject);
但它会使一切变平。我需要从 acf 中挑选东西,但将带有 id 的元素分开。
解决方案
您可以执行以下操作:
const flattenData = {
...data,
acf: undefined,
...data.acf
};
delete flattenData['acf'];
此方法链接一些解构分配。首先——...data
我们复制第一层的所有数据。然后在我们用 覆盖的新对象acf
中undefined
。这减少了内存占用。最后我们覆盖/复制 的完整对象data.acf
,从而以您想要的方式展平数组。
如果您可以使用acf: undefined
数组中的 ,则可以删除delete flattenData['acf']
并使其更快一些。
推荐阅读
- tensorflow - 为什么我们需要在 CycleGAN 中生成和 tf.onelike(生成)之间的二进制交叉熵?
- symfony - pagination_items_per_page 和 pagination_maximum_items_per_page 之间的 API 平台差异
- javascript - 是否可以包含用于测试自动化的 devtool 控制台检查?(铬合金)
- python - 使用 VowpalWabbit 优化 CTR(点击率):如何选择合适的参数?
- java - 如何在 Spring Boot 的 WebSocket STOMP 中设置自己的 Principal?
- flutter - 滑块小部件的颤动高度?
- sharepoint - MS Sharepoint:定期发送附有列表文件的电子邮件
- javascript - Eloquent JavaScript 第 7 章项目:机器人
- python - 为什么当类在函数中时,类中的全局行为会有所不同?
- rabbitmq - 无法以 CSV 类型将 RabbitMQ 读取到 Siddhi